Почему jQuery onbeforeunload не работает в Chrome и Firefox?

jQuery onbeforeunload не работает в Chrome и Firefox. Он корректно работает в IE и Safari.

jQuery(window).bind('onbeforeunload' ,function () {
    mymethod();
});

Приведенный выше код правильно работает в IE и Safari, но не в Firefox и Chrome.


person user1990525    schedule 01.04.2014    source источник
comment
Что внутри mymethod(); и как это работает в других браузерах?   -  person The Alpha    schedule 01.04.2014
comment
Я пробовал простое оповещение. Даже это не работает. Кстати, это вызов ajax.   -  person user1990525    schedule 01.04.2014
comment
использование оповещения в этом случае может быть наихудшим выбором, так как браузеры изо всех сил стараются исключить возможность для разработчика заставить пользователя оставаться на сайте, и оповещение, являющееся модальной функцией, может быть использовано для этого :)   -  person qbolec    schedule 21.10.2014


Ответы (1)


Согласно ссылке MDN window.onbeforeunload,

Функция должна присвоить строковое значение свойству returnValue объекта Event и вернуть ту же строку.

Обратите внимание на этот jsFiddle

jQuery(window).bind('beforeunload', function(e) {
    var message = "Why are you leaving?";
    e.returnValue = message;
    return message;
});

Обратите внимание, что некоторые события могут быть проигнорированы:

[...] в спецификации HTML5 указано, что вызовы методов window.showModalDialog(), window.alert(), window.confirm() и window.prompt() могут игнорироваться во время этого мероприятия.

Важное замечание об AJAX:

Если вы пытаетесь сделать вызов AJAX, когда пользователь уходит, запрос может быть отменен (прерван) до его завершения. Вы можете отключить опцию async как способ обойти это. Например:

$.ajax({
    url: "/",
    type: "GET",
    async: false
});

Обновление 2017 г.:

Многие браузеры больше не поддерживают настраиваемый текст в диалоговом окне оповещения, когда пользователь уходит.

Последние версии Chrome, Firefox, Opera и Safari не отображают пользовательский текст.

Edge и IE по-прежнему поддерживают это.

Обновление 2021:

Только Internet Explorer поддерживает настраиваемое текстовое сообщение.

person Rowan Freeman    schedule 01.04.2014
comment
Просто добавление возвращаемого значения исправило это для меня. - person kjdion84; 14.03.2017