Обнаружение закрытия браузера / вкладки с использованием JavaScript (или любого другого языка)
Я искал этот вопрос в разных местах, но все, что они упоминают, - это использование javascript window.unload & window.onbeforeunload. Кроме того, он не работает в Chrome в большинстве случаев, так как он блокируется.
Тогда как Google удается это сделать. Если мы пишем письмо и по ошибке закрываем вкладку, Google выдает нам сообщение "Вы уверены?" коробка.
Кто-нибудь может мне помочь?
Что я на самом деле хочу сделать, так это попросить подтверждения у пользователя, когда он заполняет форму и по ошибке нажимает на закрытие вкладки. Если да, я позволю ему уйти, иначе он останется на странице и продолжит заполнять свою форму.
3 ответа
Я протестировал, и пример, размещенный на MDN, четко работает в Chrome.
<script>
window.onbeforeunload = function (e) {
e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = 'Any string';
}
// For Safari
return 'Any string';
};
function formSubmit() {
window.onbeforeunload = null;
}
</script>
...
<form onsubmit="formSubmit()">...</form>
Таким образом, открывается диалоговое окно, которое не будет блокироваться блокировщиком всплывающих окон, поскольку он создается по щелчку пользователя.
Если вы хотите спросить пользователя, хотят ли они покинуть страницу, когда они что-то изменили в формах на странице, взгляните на PageHasFormChanges. Имейте в виду, что я разработал его для использования на очень простых страницах, с одной или двумя формами.
PageHasFormChanges: Плагин jQuery, чтобы проверить, изменилось ли что-либо в любой форме на странице, и предупредить пользователя перед тем, как покинуть страницу.
Вам не нужно ничего делать, но загрузите скрипт на свою страницу. Вы можете изменить значения по умолчанию, хотя:
JoelPurra.PageHasFormChanges.setOptions({
leavingPageWarningMessage: "Are you sure?"
});
Если вы используете ajax для отправки ваших форм, вы можете рассмотреть возможность настройки resetWarningOnPreventedSubmit
в true
,
Вы можете использовать функцию выгрузки jquery:
$(window).unload(function() {
alert('Handler for .unload() called.');
});