Есть ли способ запустить окончательный код JavaScript, когда пользователь закрывает окно браузера или обновляет страницу?
Я думаю о чем-то похожем на onload, но больше на onclose? Спасибо.
Мне не нравится метод onbeforeunload, который всегда приводит к всплывающему окну подтверждения (оставить страницу / остаться в Mozilla) или (перезагрузить / не перезагружать в Chrome). Есть ли способ выполнить код незаметно?
javascript
browser
Питер
источник
источник
Ответы:
Существуют оба варианта:
window.onbeforeunload
иwindow.onunload
, которые используются по-разному в зависимости от браузера. Их можно назначить либо установив свойства окна для функций, либо используя.addEventListener
:Обычно
onbeforeunload
используется, если вам нужно запретить пользователю покидать страницу (например, пользователь работает с некоторыми несохраненными данными, поэтому он / она должны сохранить перед уходом). Насколько я знаю, Operaonunload
не поддерживает , но вы всегда можете установить и то, и другое.источник
Хорошо, я нашел для этого рабочее решение, оно состоит из использования
beforeunload
события и последующего возврата обработчикаnull
. Это выполнит требуемый код без всплывающего окна подтверждения. Это выглядит примерно так:Надеюсь это поможет.
источник
return false;
делает то же самое (т.е. предотвращает поведение по умолчанию), и это более семантически правильно.Иногда вам может понадобиться сообщить серверу, что пользователь покидает страницу. Это полезно, например, для очистки несохраненных изображений, временно хранящихся на сервере, для того, чтобы пометить этого пользователя как «оффлайн» или для регистрации, когда они завершили свой сеанс.
Раньше вы отправляли в
beforeunload
функции запрос AJAX , однако здесь возникают две проблемы. Если вы отправляете асинхронный запрос, нет никакой гарантии, что запрос будет выполнен правильно. Если вы отправляете синхронный запрос, он более надежен, но браузер будет зависать, пока запрос не будет завершен. Если это медленный запрос, это будет огромным неудобством для пользователя.К счастью, теперь у нас есть
navigator.sendBeacon()
. Используя этотsendBeacon()
метод, данные передаются на веб-сервер асинхронно, когда пользовательский агент имеет возможность сделать это, не задерживая выгрузку и не влияя на производительность следующей навигации. Это решает все проблемы с отправкой данных аналитики: данные отправляются надежно, они отправляются асинхронно и не влияют на загрузку следующей страницы. Вот пример его использования:sendBeacon()
это поддерживается в:В настоящее время НЕ поддерживается в:
Вот полифилл для sendBeacon () на случай, если вам нужно добавить поддержку неподдерживаемых браузеров. Если метод недоступен в браузере, вместо этого он отправит синхронный запрос AJAX.
источник
http://example.com/script.php?token=something&var1=val1&var2=val2
помещения этих значений в GET.версия jQuery:
Обновление : jQuery 3:
Спасибо Гарретт
источник
В документации предлагается прослушивание события onbeforeunload и / или добавление прослушивателя событий в окне.
Вы также можете просто заполнить свойства .onunload или .onbeforeunload окна функцией или ссылкой на функцию.
Хотя поведение не стандартизировано для браузеров, функция может возвращать значение, которое браузер будет отображать при подтверждении необходимости покинуть страницу.
источник
Вы можете использовать
window.onbeforeunload
.источник
Событие вызывается
beforeunload
, поэтому вы можете назначить функциюwindow.onbeforeunload
.источник
Вы можете попробовать что-то вроде этого:
источник