Я не могу запустить событие разгрузки в Chrome

Этот код отлично работает в Firefox, , но я больше не могу сделать событие выгрузки в Chrome. Chrome перестала поддерживать событие разгрузки?

Это мой код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

<script type="text/javascript" src="../jquery/jquery.js"></script>

<script type="text/javascript">

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME
    window.addEventListener("pagehide", pageHidden, false);

    window.onunload = function () { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD

    $(window).unload(function () { //WORKS ON FIREFOX BUT NOT IN CHROME
        alert("Are you sure 3?");
    });

</script>
</head>

<body>
TEST WEBSITE
<a href="#" onclick="location.href='http://www.iamawesome.com'; return false;">external link</a>
</body> 
</html>

Как я могу заставить событие выгрузки работать в Chrome?

Спасибо!


ОТВЕТ: Не тестируйте событие разгрузки с помощью предупреждений;)

Ответ 1

window.onunload = alert("Are you sure 2?");

Это неверно. Вы устанавливаете onunload на результат alert, вам нужно установить его в функцию:

window.onunload = function(){
    alert("Are you sure?");
}

Если вы хотите использовать jQuery, это будет работать во всех браузерах.

$(window).unload(function () {
     alert("Are you sure?");
});

ПРИМЕЧАНИЕ. Может показаться, что он не работает в Chrome, но это так. Это потому, что Chrome блокирует alert в событии onunload.

Ответ 2

Try:

window.onbeforeunload = function () {
    // code
};

или

window.onpagehide = function () {
    // code
};

Ответ 3

Вы ничего не запускаете - вы просто выполняете выражение, которое хотите добавить в качестве обработчика:

window.onunload = function(event) {
    alert("Are you sure 2?");
};

Ответ 4

Из того, что я прочитал, кажется, что Chrome блокирует предупреждения, когда это событие было запущено. Однако вы можете запускать некоторые функции, а не только что-либо, что взаимодействует с пользователем.

Из window.onbeforeunload в Chrome: какое последнее исправление?, кажется, если все, что вы хотите сделать, это всплывающее сообщение с подтверждением, у вас есть для этого, возвращая строку с сообщением из функции, которую вы задали как обратный вызов.

window.onbeforeunload = function() {
    // Some wrap up code (no alerts, confirms, redirects, etc)
    return 'My confirmation messsage'; 
}

Текст "Мое подтверждающее сообщение" появится в диалоговом окне подтверждения выбора Chrome. Firefox документирует это поведение здесь.