Я думаю, что спецификация 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.Таким образом, некоторые асинхронные действия могут быть выполнены, если они завершатся до того, как пользователь подтвердит выход с сайта.
Итак, в общем, я думаю, что то, чего вы хотите достичь, невозможно.поскольку в браузере есть приглашение по умолчанию, его нельзя заменить пользовательским модальным.Алеры также не могут быть выполнены.