Was ist der beste Weg, um festzustellen, ob ein Benutzer eine Webseite verlässt?
Das onunload
JavaScript-Ereignis funktioniert nicht jedes Mal (die HTTP-Anforderung dauert länger als die zum Beenden des Browsers erforderliche Zeit).
Das Erstellen eines solchen wird wahrscheinlich von aktuellen Browsern blockiert.
javascript
ANaimi
quelle
quelle
Mozilla Developer Network hat eine schöne Beschreibung und ein Beispiel für onbeforeunload .
Wenn Sie den Benutzer vor dem Verlassen der Seite warnen möchten, wenn Ihre Seite verschmutzt ist (dh wenn der Benutzer einige Daten eingegeben hat):
quelle
Hier ist eine alternative Lösung: Da sich in den meisten Browsern die Navigationssteuerelemente (Navigationsleiste, Registerkarten usw.) über dem Seiteninhaltsbereich befinden, können Sie den Mauszeiger, der die Seite verlässt, oben erkennen und ein " Bevor Sie gehen " anzeigen. Dialog. Es ist völlig unauffällig und ermöglicht es Ihnen, mit dem Benutzer zu interagieren, bevor er die Aktion zum Verlassen tatsächlich ausführt.
Der Nachteil ist, dass es natürlich eine Vermutung ist, dass der Benutzer tatsächlich beabsichtigt zu gehen, aber in den allermeisten Fällen ist es richtig.
quelle
Dafür benutze ich:
Es wird kurz vor dem Entladen der Seite ausgelöst.
quelle
onbeforeunload
?Ich weiß, dass diese Frage beantwortet wurde, aber falls Sie nur dann etwas auslösen möchten, wenn der eigentliche BROWSER geschlossen ist, und nicht nur, wenn eine Seitenladung auftritt, können Sie diesen Code verwenden:
In meinem Beispiel lösche ich den lokalen Speicher und alarmiere den Benutzer mit den Maus- und Koordinaten. Nur wenn der Browser geschlossen ist, wird dies bei allen Seitenladevorgängen aus dem Programm ignoriert.
quelle
e
in diesem Fall die Variable) verwendet werden: 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/eventEine (etwas hackige) Möglichkeit, dies zu tun, besteht darin, durch einen AJAX-Aufruf auf die Serverseite zu ersetzen und Links zu erstellen, die von Ihrer Site wegführen. Dies zeigt an, dass der Benutzer die Site verlässt, und dann denselben Javascript-Block zu verwenden, um den Benutzer zu der externen Site zu führen, auf der er sich befindet habe angefordert.
Dies funktioniert natürlich nicht, wenn der Benutzer einfach das Browserfenster schließt oder eine neue URL eingibt.
Um dies zu umgehen, müssen Sie möglicherweise setTimeout () von Javascript auf der Seite verwenden und alle paar Sekunden einen AJAX-Aufruf durchführen (abhängig davon, wie schnell Sie wissen möchten, ob der Benutzer gegangen ist).
quelle
Dank Service Workers ist es möglich, eine ähnliche Lösung wie Adam rein clientseitig zu implementieren , sofern der Browser dies unterstützt. Umgehen Sie einfach Herzschlaganfragen:
quelle
setInterval(() => fetch('/heartbeat'), 5000)
?In dem Fall, dass Sie asynchronen Code ausführen müssen (z. B. das Senden einer Nachricht an den Server, dass sich der Benutzer gerade nicht auf Ihre Seite konzentriert), gibt das Ereignis dem asynchronen Code
beforeunload
keine Zeit zum Ausführen. Im Falle von Async fand ich, dass dievisibilitychange
undmouseleave
Ereignisse die besten Optionen sind. Diese Ereignisse werden ausgelöst, wenn der Benutzer die Registerkarte wechselt, den Browser ausblendet oder den Courser aus dem Fensterbereich entfernt.quelle
Für was es wert ist, das habe ich getan und vielleicht kann es anderen helfen, obwohl der Artikel alt ist.
PHP:
JS
Ajax-Aufruf von activeUser.php
Datenbank:
Grundsätzlich postet das js alle 5 Sekunden in einer PHP-Datei, die den Benutzer und die IP-Adresse des Benutzers verfolgt. Aktive Benutzer sind einfach ein Datenbankeintrag, bei dem der Datenbankzeitstempel innerhalb von 5 Sekunden aktualisiert wird. Alte Benutzer beenden die Aktualisierung der Datenbank. Die IP-Adresse wird nur verwendet, um sicherzustellen, dass ein Benutzer eindeutig ist, sodass sich 2 Personen auf der Site gleichzeitig nicht als 1 Benutzer registrieren.
Wahrscheinlich nicht die effizienteste Lösung, aber sie macht den Job.
quelle