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

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

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

Над кодом работает правильно в IE и Safari, но не в Firefox и Chrome.

Ответ 1

В соответствии с MDN window.onbeforeunload ссылка,

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

Наблюдать this 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 все еще поддерживают это.