iNeedHelp
@iNeedHelp

Как правильно отследить событие закрытия вкладки?

Здравствуйте. Мне нужно выполнить некоторую функцию при закрытии страницы. Как мне отследить событие? Пробовал так:

window.onUnload = function() {
  alert('hello');
  return 'hello';
}

window.onbeforeunload = function() {
  alert('hello');
  return 'hello';
}


Оба способа не работают. Как исправить?
  • Вопрос задан
  • 21224 просмотра
Решения вопроса 1
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Смотря, что вы хотите сделать. В некоторых своих проектах, я использовал событие beforeunload для закрытия сессии и для этого отправлял ajax-запрос с определенной меткой. Это вполне возможно.
evg_ писал, что
не получится, на 99.999% уверен
, а я, пожалуй, использую оставшиеся 0.001% )) Для теста, создайте html-документ, в который запишите следующий JS-код:
window.addEventListener('beforeunload', function (e) {
	var xhr = new XMLHttpRequest();
		xhr.open('POST', 'handler.php', true);
		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xhr.send( 'key=' + encodeURIComponent('Hi') );
 
    e.preventDefault();
    var confirmationMessage = "";
    (e || window.event).returnValue = confirmationMessage;
    return confirmationMessage;
}, false);
И еще один PHP-файл "handler.php" в той же директории, в котором запишем:
<?php
if (!empty($_POST['key'])) {
	file_put_contents('test.txt', $_POST['key']);
}
Теперь откроем и закроем html-файл в любом браузере, кроме осла восьмой версии и ниже. Просто потому, что объект XMLHttpRequest в них не поддерживается, а кроссбраузерное решение нам для теста и не нужно. Результат можем наблюдать в создавшемся файле test.txt
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
evgeniy8705
@evgeniy8705
Повелитель вселенной
Выполнить свою функцию не получится, на 99.999% уверен.
Данное событие позволяет только вывести модальное окно, уверен что хочу закрыть или нет.
В некоторых браузерах можно написать свой текст, написав в обработчике
window.onbeforeunload = function() {
  return 'Some string';
}


Не работает из за безопасности.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы