Предотвращение вызова onbeforeunload при нажатии на ссылку mailto - PullRequest
3 голосов
/ 17 ноября 2009

Есть ли способ предотвратить вызов 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>

Ответы [ 2 ]

5 голосов
/ 17 ноября 2009

А как насчет обходного пути?

$(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;
    }
}

Демо .

1 голос
/ 21 февраля 2011

Вот предложенное решение, которое выглядит разумным

http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/


ОБНОВЛЕНИЕ (ссылка не работает) - скопированное содержимое из Google Cache

Как использовать 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 регистрируется перед отправкой, мы можем добавить небольшое объявление переменной к нашей кнопке отправки, чтобы для submitFormOkay было установлено значение true, прежде чем произойдет отправка формы:

<input type="submit" id="submit_button" onclick="submitFormOkay = true;">
...