Причина, по которой ничего не происходит при использовании 'alert ()', вероятно, объясняется MDN: «Спецификация HTML гласит, что вызывает методы window.alert (), window.confirm () и window.prompt () может игнорироваться во время этого события. "
Но есть и другая причина, по которой вы можете вообще не видеть предупреждение, независимо от того, вызывает ли оно alert () или нет, также объясненное на том же сайте:
"... браузеры могут не отображать приглашения, созданные в обработчиках событий до загрузки, если страница не взаимодействовала с"
Это то, что я вижу с текущими версиями Chrome и FireFox. Я открываю свою страницу, на которой установлен обработчик beforeunload с этим кодом:
window.addEventListener
('beforeunload'
, function (evt)
{ evt.preventDefault();
evt.returnValue = 'Hello';
return "hello 2222"
}
);
Если я не нажимаю на свою страницу, другими словами «не взаимодействую» с ней, и нажимаю кнопку закрытия, окно закрывается без предупреждения.
Но если я нажму на страницу, прежде чем пытаться закрыть окно или вкладку, я получу предупреждение и могу отменить закрытие окна.
Таким образом, эти браузеры являются «умными» (и удобными для пользователя) в том смысле, что если вы ничего не сделали со страницей, на ней не может быть никакого пользовательского ввода, который нужно было бы сохранить, поэтому они закроют окно без каких-либо предупреждений. ,
Учтите, что без этой функции любой сайт может эгоистично спросить вас: «Вы действительно хотите покинуть наш сайт?», Когда вы уже четко заявили о своем намерении покинуть их сайт.
SEE:
https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload