Запустить код JavaScript при закрытии окна или обновлении страницы?

Есть ли способ запустить окончательный код JavaScript, когда пользователь закрывает окно браузера или обновляет страницу?

Я думаю о чем-то подобном onload, но больше похоже на onclose? Спасибо.

Мне не нравится метод onbeforeunload, который всегда выдает всплывающее окно подтверждения (оставить страницу/остаться на mozilla) или (перезагрузить/не перезагружать на хром). Есть ли способ выполнить код тихо?

Ответ 1

Хорошо, я нашел для этого рабочее решение, оно состоит из использования события beforeunload, а затем возврата обработчика null. Это выполняет желаемый код без всплывающего окна подтверждения. Это происходит примерно так:

window.onbeforeunload = closingCode;
function closingCode(){
   // do something...
   return null;
}

Надеюсь, что это поможет.

Ответ 2

Существует как window.onbeforeunload, так и window.onunload, которые используются по-разному в зависимости от браузера. Вы можете оценить их, установив свойства окна в функции или используя .addEventListener:

window.onbeforeunload = function(){
   // Do something
}
// OR
window.addEventListener("beforeunload", function(e){
   // Do something
}, false);

Обычно onbeforeunload используется, если вам нужно остановить пользователя от выхода из страницы (например, пользователь работает с некоторыми несохраненными данными, поэтому он должен сохранять перед отъездом). onunload не поддерживается Opera, насколько я знаю, но вы всегда можете установить оба.

Ответ 3

версия jQuery:

$(window).unload(function(){
    // Do Something
});

Обновить: jQuery 3:

$(window).on("unload", function(e) {
    // Do Something
});

Спасибо Гарретт

Ответ 4

В этой документации рекомендуется прослушивание события onbeforeunload и/или добавление прослушивателя событий в окне.

window.addEventListener('beforeunload', function(event) {
  //do something here
}, false);

Вы также можете просто заполнить свойства .onunload или .onbeforeunload окна с помощью функции или ссылки функции.

Хотя поведение не стандартизировано в браузерах, функция может вернуть значение, отображаемое браузером при подтверждении того, оставить ли страницу.

Ответ 5

Вы можете использовать window.onbeforeunload.

window.onbeforeunload = confirmExit;
function confirmExit(){
    alert("confirm exit is being called");
    return false;
}

Ответ 6

Событие называется beforeunload, поэтому вы можете назначить функцию window.onbeforeunload.

Ответ 7

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

Исторически вы отправляли запрос AJAX в функцию beforeunload, однако это имеет две проблемы. Если вы отправляете асинхронный запрос, нет гарантии, что запрос будет выполнен правильно. Если вы отправляете синхронный запрос, он более надежный, но браузер будет зависать, пока запрос не будет завершен. Если это медленный запрос, это будет огромным неудобством для пользователя.

К счастью, теперь у нас есть navigator.sendBeacon(). Используя метод sendBeacon(), данные передаются асинхронно на веб-сервер, когда пользовательский агент имеет возможность сделать это, не задерживая выгрузку или влияя на производительность следующей навигации. Это решает все проблемы с предоставлением аналитических данных: данные отправляются надежно, они отправляются асинхронно, и это не влияет на загрузку следующей страницы. Вот пример его использования:

window.addEventListener("unload", logData, false);

function logData() {
  navigator.sendBeacon("/log.php", analyticsData);
}

sendBeacon() поддерживается в:

  • Край 14
  • Firefox 31
  • Chrome 39
  • Safari 11.1
  • Опера 26
  • iOS Safari 11.4

В настоящее время он не поддерживается:

  • Internet Explorer
  • опера мини

Вот полипол для sendBeacon(), если вам нужно добавить поддержку неподдерживаемых браузеров. Если этот метод недоступен в браузере, он отправит вместо него синхронный запрос AJAX.

Ответ 8

Вы можете попробовать что-то вроде этого:

<SCRIPT language="JavaScript">
<!--
function loadOut()
{
window.location="http://www.google.com";
}
//-->
</SCRIPT>

<body onBeforeUnload="loadOut()">