Запретить вызов onbeforeunload при нажатии на ссылку mailto
-
20-09-2019 - |
Вопрос
Есть ли способ предотвратить вызов onbeforeunload при нажатии на ссылку mailto в Chrome.В FF, Safari, IE он работает нормально.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
google.load("jquery", "1.3.2");
</script>
<script type="text/javascript">
$(document).ready(function(){
window.onbeforeunload = confirmExit;
});
function confirmExit() {
return "Are you sure?";
}
</script>
</head>
<body>
<a href="mailto:someone@somewhere.com?subject=test mail&body=Hello%20World">Mail Link</a>
</body>
</html>
Решение
Как насчет обходного пути?
$(document).ready(function(){
mailtoClicked = false;
window.onbeforeunload = confirmExit;
//Test if browser is Chrome
if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) {
$('a[href^=mailto]').click(function() {mailtoClicked = true;});
}
});
function confirmExit() {
if (!mailtoClicked) {
return "Are you sure?";
} else {
mailtoClicked = false;
}
}
Другие советы
Вот предлагаемое решение, которое выглядит разумным
http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/
ОБНОВЛЕНИЕ (ссылка недоступна) - Скопировано содержимое из кэша Google
Как использовать onbeforeunload с кнопками отправки формы
23 сентября 2009 — Geekery
Занимаясь программированием, я столкнулся с интересным затруднительным положением.Хотя я понимаю, что это зло - затруднять пользователю покидание страницы, я здесь не для того, чтобы спорить о достоинствах (или их недостатке) onbeforeunload.
В определенной форме мы заставляем браузер не кэшировать информацию, чтобы избежать потенциальных проблем с AJAX / JavaScript, если они должны покинуть форму и вернуться, поскольку браузеры не все действуют одинаково (например, IE оставляет флажки установленными, но не запоминает изменения, которые произошли со страницей из-за JavaScript).Таким образом, мы предупреждаем наших пользователей, когда они собираются оставить форму заказа, чтобы сообщить им, что им нужно будет заполнить ее снова.
Функция была достаточно простой:
window.onbeforeunload = function () {
return "You are about to leave this order form. You will lose any information...";
}
К сожалению, это также было бы вызвано, если бы пользователь отправил форму, которая, очевидно, не является тем, что мы хотим.Порывшись в Интернете, я наткнулся на простое решение, которым решил поделиться:
// Create a variable that can be set upon form submission
var submitFormOkay = false;
window.onbeforeunload = function () {
if (!submitFormOkay) {
return "You are about to leave this order form. You will lose any information...";
}
}
Поскольку при нажатии кнопки отправки onclick регистрируется перед onsubmit, мы можем добавить небольшое объявление переменной к нашей кнопке отправки, чтобы для submitFormOkay было установлено значение true до отправки формы:
<input type="submit" id="submit_button" onclick="submitFormOkay = true;">