Jaki jest najlepszy sposób na wykrycie, czy użytkownik opuszcza stronę internetową?
onunload
Zdarzenie JavaScript nie działa za każdym razem (żądanie HTTP trwa dłużej niż czas wymagany do zakończenia przeglądarkę).
Utworzenie jednego z nich prawdopodobnie zostanie zablokowane przez obecne przeglądarki.
javascript
ANaimi
źródło
źródło
Mozilla Developer Network ma ładny opis i przykład onbeforeunload .
Jeśli chcesz ostrzec użytkownika przed opuszczeniem strony, jeśli strona jest brudna (tj. Jeśli użytkownik wprowadził jakieś dane):
źródło
Oto alternatywne rozwiązanie - ponieważ w większości przeglądarek elementy sterujące nawigacją (pasek nawigacyjny, karty itp.) Znajdują się nad obszarem zawartości strony, możesz wykryć wskaźnik myszy opuszczający stronę u góry i wyświetlić „ zanim wyjedziesz ” dialog. Jest to całkowicie dyskretne i pozwala na interakcję z użytkownikiem, zanim faktycznie wykona akcję opuszczenia.
Minusem jest to, że oczywiście jest to przypuszczenie , że użytkownik rzeczywiście zamierza opuścić, ale w większości przypadków jest to poprawne.
źródło
Do tego używam:
Jest uruchamiany tuż przed rozładowaniem strony.
źródło
onbeforeunload
?Wiem, że odpowiedziano na to pytanie, ale jeśli chcesz, aby coś uruchomiło się tylko wtedy, gdy aktualny PRZEGLĄDARKA jest zamknięta, a nie tylko wtedy, gdy nastąpi ładowanie strony, możesz użyć tego kodu:
W moim przykładzie wyczyszczam pamięć lokalną i ostrzegam użytkownika za pomocą myszy i współrzędnych, tylko gdy przeglądarka jest zamknięta, zostanie to zignorowane przy wszystkich ładowaniach stron z poziomu programu.
źródło
e
należy użyć parametru zdarzenia ( w tym przypadku zmiennej): stackoverflow.com/questions/9813445/ …This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user.
developer.mozilla.org/en-US/docs/Web/API/Window/eventJednym (nieco zhackowanym) sposobem jest zastąpienie linków prowadzących z Twojej witryny wywołaniem AJAX po stronie serwera, wskazującym, że użytkownik odchodzi, a następnie skorzystanie z tego samego bloku javascript, aby przenieść użytkownika na stronę zewnętrzną poprosiłem.
Oczywiście to nie zadziała, jeśli użytkownik po prostu zamknie okno przeglądarki lub wpisze nowy adres URL.
Aby obejść ten problem, potencjalnie będziesz musiał skorzystać ze strony setTimeout () Javascript na stronie, wykonując wywołanie AJAX co kilka sekund (w zależności od tego, jak szybko chcesz wiedzieć, czy użytkownik odszedł).
źródło
Dzięki pracownikom serwisowym możliwe jest wdrożenie rozwiązania podobnego do rozwiązania Adama wyłącznie po stronie klienta, pod warunkiem, że przeglądarka go obsługuje. Wystarczy obejść żądania pulsu:
źródło
setInterval(() => fetch('/heartbeat'), 5000)
?W przypadku konieczności wykonania kodu asynchronicznego (np. Wysłania do serwera wiadomości, że użytkownik nie jest teraz skoncentrowany na stronie), zdarzenie
beforeunload
nie da czasu na uruchomienie kodu asynchronicznego. W przypadku asynchronii stwierdziłem, żevisibilitychange
imouseleave
zdarzenia są najlepszymi opcjami. Te zdarzenia są uruchamiane, gdy użytkownik zmienia kartę, ukrywa przeglądarkę lub usuwa kuriera z zakresu okna.źródło
Jeśli chodzi o jego wartość, to właśnie zrobiłem i może może pomóc innym, nawet jeśli artykuł jest stary.
PHP:
JS
Wywołanie Ajax do activeUser.php
Baza danych:
Zasadniczo co 5 sekund js opublikuje w pliku php, który będzie śledził użytkownika i adres IP użytkownika. Aktywni użytkownicy to po prostu rekord bazy danych, który ma aktualizację znacznika czasu bazy danych w ciągu 5 sekund. Starzy użytkownicy przestają aktualizować bazę danych. Adres IP służy tylko do upewnienia się, że użytkownik jest unikalny, więc 2 osoby w witrynie jednocześnie nie rejestrują się jako 1 użytkownik.
Prawdopodobnie nie jest to najbardziej wydajne rozwiązanie, ale działa.
źródło