Запретить вызов onbeforeunload при нажатии на ссылку mailto

StackOverflow https://stackoverflow.com/questions/1749052

  •  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;">
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top