Czasami możesz chcieć powiadomić serwer, że użytkownik opuszcza stronę. Jest to przydatne, na przykład, do czyszczenia niezapisanych obrazów przechowywanych tymczasowo na serwerze, do oznaczania tego użytkownika jako „offline” lub do rejestrowania, kiedy zakończy sesję.
W przeszłości w beforeunloadfunkcji wysyłano żądanie AJAX , jednak wiąże się to z dwoma problemami. Jeśli wyślesz żądanie asynchroniczne, nie ma gwarancji, że zostanie ono wykonane poprawnie. Jeśli wyślesz żądanie synchroniczne, jest ono bardziej niezawodne, ale przeglądarka zawiesiłaby się do zakończenia żądania. Jeśli jest to powolne żądanie, stanowiłoby to ogromną niedogodność dla użytkownika.
Na szczęście teraz mamy navigator.sendBeacon(). Korzystając z tej sendBeacon()metody, dane są przesyłane asynchronicznie do serwera internetowego, gdy Agent użytkownika ma taką możliwość, bez opóźniania rozładunku lub wpływu na wydajność następnej nawigacji. To rozwiązuje wszystkie problemy związane z przesyłaniem danych analitycznych: dane są przesyłane niezawodnie, są wysyłane asynchronicznie i nie ma to wpływu na ładowanie następnej strony. Oto przykład jego użycia:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()jest obsługiwany w:
- Krawędź 14
- Firefox 31
- Chrome 39
- Safari 11.1
- Opera 26
- iOS Safari 11.4
Obecnie NIE jest obsługiwane w:
- Internet Explorer
- Opera Mini
Oto polyfill dla sendBeacon () na wypadek, gdybyś potrzebował dodać obsługę nieobsługiwanych przeglądarek. Jeśli metoda nie jest dostępna w przeglądarce, zamiast tego wyśle synchroniczne żądanie AJAX.