Кратко
СкопированоКогда пользователь уходит со страницы, генерируется событие unload. Мы можем отреагировать на него, подписавшись на это событие у объекта window.
Как пишется
Скопировано
window.addEventListener('unload', function () { // ...})
window.addEventListener('unload', function () {
// ...
})
Как понять
СкопированоВ современном вебе всё увешано трекингом: клики, переходы, прокрутка до определённых секций и ещё куча всего. Почему бы не трекать уход пользователя со страницы?
window.addEventListener('unload', function () { const someUsefulData = getSomeUsefulData() navigator.sendBeacon('/some-endpoint', someUsefulData)})
window.addEventListener('unload', function () {
const someUsefulData = getSomeUsefulData()
navigator.sendBeacon('/some-endpoint', someUsefulData)
})
Что происходит в коде выше? Когда пользователь покинет страницу, функция get соберёт аналитическую информацию, а метод send отправит её по адресу /some. Метод send — это неблокирующий метод отправки данных. Он находится в состоянии черновика и ещё не принят как стандарт W3C, но уже давно поддерживается всеми браузерами.
Неблокирующая отправка означает, что она будет выполнена асинхронно и не будет мешать выгрузке текущей страницы и загрузке следующей.
Раньше разработчики использоваликостыльныеспециальные техники, чтобы отправить что-либо в момент закрытия страницы, например:
- Синхронные вызовы
XML.Http Request - Картинки со специальными
src(так называемые пиксели).- Иногда даже создавались пустые циклы на несколько секунд.
Метод
sendпозволяет надёжно и асинхронно отправить данные, не мешая нормальному ходу вещей.Beacon
На практике
Скопированосоветует
Скопировано🛠 Событие unload обрабатывают для отправки трекинговых запросов.
🛠 Не полагайтесь на событие unload для определения завершения пользовательской сессии. Например, в следующем сценарии оно не наступит:
- Пользователь посещает страницу в браузере с мобильного телефона.
- Пользователь меняет активное приложение.
- Пользователь закрывает браузер через менеджер приложений.
Обрабатывайте событие visibilitychange в качестве более надёжной альтернативы unload.