Кратко
СкопированоКогда пользователь уходит со страницы, генерируется событие 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.