Событие beforeunload не срабатывает после обновления страницы Chrome - PullRequest
0 голосов
/ 05 июня 2018

У меня есть этот простой код

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <!--<script src="angular.min.js"></script>-->
    <script>       

        window.onload = function () {
            window.addEventListener("unload", function () {
                debugger;
            });
            window.addEventListener("beforeunload", function () {
                debugger;
            });
            window.onbeforeunload = function () {
               
            }
        }
    </script>
    
</head>
<body ng-app="app">   

</body>
</html>

Я хочу, чтобы события разгрузки или перед загрузкой запускались после обновления страницы.Этого не происходит в версии Chrome 67.0.3396.62.Я пробовал Firefox и Edge, и это работает хорошо.Это также работает, когда я закрываю вкладку.Ошибка возникает только при обновлении страницы.

1 Ответ

0 голосов
/ 14 июня 2018

Вы столкнулись с проблемой , о которой уже сообщалось.Это похоже на ошибку, но согласно Chrome dev (kozy) это особенность :

Спасибо за воспроизведение.Это на самом деле особенность.Как только вы нажали reload, мы игнорируем все точки останова перед перезагрузкой страницы.Это полезно все время, когда у вас много точек останова и вам нужно перезагрузить страницу, чтобы возобновить сеанс отладки.

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

Я добавил смелый акцент, чтобы указать на обходной путь, предложенный Кози.Я попробовал это и обнаружил, что это работает.

Помимо проблемы с оператором debugger, обработчики выполняются независимо от того, перезагружаете ли вы или закрываете вкладку.В обоих следующих случаях я получаю сообщение о наличии, которое Chrome предоставляет при возврате true:

window.addEventListener("beforeunload", function (ev) {
  ev.returnValue = true; // `return true` won't work here.
});

Это тоже работает:

window.onbeforeunload = function () {
  return true;
}

Раньше вы могли использовать возвратзначение с сообщением, и браузер будет показывать ваше пользовательское сообщение, но браузеры, как правило, больше не поддерживают это.

Если вы хотите установить обработчик для beforeunload внутри обработчика для load, это полностью зависит от ваших целей .Например, у меня есть приложение для редактирования документов, которое не устанавливает обработчик beforeunload до тех пор, пока приложение не начнет инициализацию, что намного позже, чем событие load.Обработчик beforeunload предназначен для того, чтобы пользователь не покинул страницу с несохраненными изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...