Зачем показывать всплывающее окно, когда пользователь закрывает вкладку в Chrome? - PullRequest
0 голосов
/ 26 ноября 2018

Подскажите, пожалуйста, почему всплывающее окно или предупреждение не отображаются, когда пользователь закрывает вкладку в Chrome?Вот мой код

http://plnkr.co/edit/Whospoc9SLVe6gjbsVWc?p=preview

Выполнить код на вкладке по этой ссылке http://run.plnkr.co/Tj9w5LalKQmE9w1w/

$scope.$on('onUnload', function (e) {
            alert('onBeforeUnlccoad')

        console.log('leaving page');
    });

    $scope.$on('onBeforeUnload', function (e) {
        alert('onBeforeUnload')
        console.log('leaving page');
    });

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, что спецификация onbeforeunload за последнее время молча изменилась.давайте оставим угловой в стороне и проверим базовый пример, который должен работать.

window.onbeforeunload = function(e) {
  alert('test');
  console.log('test')
  e.returnValue = 'test';
  return 'test';
};

Этот простой фрагмент кода обрабатывает событие перед загрузкой.Например, как он ведет себя в новейшем Chrome.

  • показывает браузер по умолчанию сообщение о выходе из сайта с окном подтверждения с кнопками выхода и отмены
  • console.log выполняется
  • оповещения, подсказки и другие вещи, которые блокируют выполнение javascript, автоматически блокируются.
  • также я заметил, что если мы откроем страницу с вышеуказанным кодом и не будем взаимодействовать с закрывающей вкладкой, будет возможно безсообщение, ситуация меняется, когда мы делаем что-то вроде щелчка в пустом месте, в этом случае появляется окно подтверждения по умолчанию и отображается журнал консоли

Можно даже отправить запрос ajax, например, здесь:

 window.onbeforeunload = function(e) {
  alert('test');
  console.log('test');
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'send-ajax-data.php');
  xhr.send(null);

  e.returnValue = 'test';
  return 'test';
};

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

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

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