Czy istnieje sposób na uruchomienie końcowego kodu JavaScript, gdy użytkownik zamknie okno przeglądarki lub odświeży stronę?
Myślę o czymś podobnym do onload, ale bardziej jak onclose? Dzięki.
Nie podoba mi się metoda onbeforeunload, która zawsze powoduje wyskakujące okienko z potwierdzeniem (zostaw stronę / zostań na mozilli) lub (przeładuj / nie ładuj ponownie na chrome). Czy istnieje sposób na ciche wykonanie kodu?
javascript
browser
Piotr
źródło
źródło
Odpowiedzi:
Istnieją obie opcje
window.onbeforeunload
iwindow.onunload
, które są używane w różny sposób w zależności od przeglądarki. Możesz je przypisać, ustawiając właściwości okna na funkcje lub używając.addEventListener
:Zwykle
onbeforeunload
jest używane, jeśli chcesz uniemożliwić użytkownikowi opuszczenie strony (np. Użytkownik pracuje nad niektórymi niezapisanymi danymi, więc powinien zapisać je przed opuszczeniem).onunload
nie jest obsługiwany przez Operę , o ile wiem, ale zawsze możesz ustawić oba.źródło
Ok, znalazłem działające rozwiązanie na to, polega na użyciu
beforeunload
zdarzenia, a następnie wykonaniu powrotu handleranull
. Spowoduje to wykonanie żądanego kodu bez wyskakującego okna potwierdzenia. To wygląda mniej więcej tak:Mam nadzieję że to pomoże.
źródło
return false;
robi to samo (tj. Zapobiega domyślnemu zachowaniu) i jest bardziej poprawne semantycznie.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
beforeunload
funkcji 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 tejsendBeacon()
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:sendBeacon()
jest obsługiwany w:Obecnie NIE jest obsługiwane w:
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.
źródło
http://example.com/script.php?token=something&var1=val1&var2=val2
umieszczenie tych wartości w GET.Wersja jQuery:
Aktualizacja : jQuery 3:
Dzięki, Garrett
źródło
Dokumentacja tutaj zachęca do nasłuchiwania zdarzenia onbeforeunload i / lub dodawania detektora zdarzeń w oknie.
Możesz także po prostu wypełnić właściwości .onunload lub .onbeforeunload okna funkcją lub odwołaniem do funkcji.
Chociaż zachowanie nie jest ustandaryzowane w różnych przeglądarkach, funkcja może zwrócić wartość, którą przeglądarka wyświetli podczas potwierdzania opuszczenia strony.
źródło
Możesz użyć
window.onbeforeunload
.źródło
Zdarzenie jest wywoływane
beforeunload
, więc możesz przypisać funkcję dowindow.onbeforeunload
.źródło
Możesz spróbować czegoś takiego:
źródło