Іноді, можливо, ви захочете повідомити серверу, що користувач залишає сторінку. Це корисно, наприклад, для очищення збережених зображень, що зберігаються тимчасово на сервері, для позначення цього користувача як "офлайн" або для входу в журнал після закінчення сеансу.
Історично ви надіслали б запит AJAX у beforeunload
функції, однак це має дві проблеми. Якщо ви надсилаєте асинхронний запит, немає гарантії, що запит буде виконано правильно. Якщо ви надсилаєте синхронний запит, він надійніший, але браузер буде зависати, поки запит не закінчиться. Якщо це повільний запит, це буде величезною незручністю для користувача.
На щастя, зараз у нас є navigator.sendBeacon()
. За допомогою sendBeacon()
методу дані передаються асинхронно на веб-сервер, коли Агент користувача має можливість це зробити, не затримуючи розвантаження або не впливаючи на роботу наступної навігації. Це вирішує всі проблеми з поданням аналітичних даних: дані надсилаються надійно, надсилаються асинхронно, і це не впливає на завантаження наступної сторінки. Ось приклад його використання:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
це підтримується в:
- Край 14
- Firefox 31
- Chrome 39
- Сафарі 11.1
- Опера 26
- iOS Safari 11.4
Наразі НЕ підтримується в:
- Internet Explorer
- Opera Mini
Ось поліфайл для sendBeacon (), якщо вам потрібно додати підтримку непідтримуваних браузерів. Якщо метод недоступний у браузері, він надішле натомість синхронний запит AJAX.