Gibt es eine Möglichkeit, einen endgültigen JavaScript-Code auszuführen, wenn ein Benutzer ein Browserfenster schließt oder die Seite aktualisiert?
Ich denke an etwas Ähnliches wie Onload, aber eher an Onclose? Vielen Dank.
Ich mag die Methode onbeforeunload nicht, die immer dazu führt, dass ein Bestätigungsfeld auftaucht (Seite verlassen / auf Mozilla bleiben) oder (neu laden / nicht auf Chrome neu laden). Gibt es eine Möglichkeit, den Code leise auszuführen?
javascript
browser
Peter
quelle
quelle
Antworten:
Es gibt beide
window.onbeforeunload
undwindow.onunload
, die je nach Browser unterschiedlich verwendet werden. Sie können sie entweder zuweisen, indem Sie die Fenstereigenschaften auf Funktionen setzen oder Folgendes verwenden.addEventListener
:Wird normalerweise
onbeforeunload
verwendet, wenn Sie verhindern müssen, dass der Benutzer die Seite verlässt (z. B. arbeitet der Benutzer an einigen nicht gespeicherten Daten, daher sollte er diese vor dem Verlassen speichern).onunload
wird von Opera meines Wissens nicht unterstützt , aber Sie können immer beides einstellen.quelle
Ok, ich habe eine funktionierende Lösung dafür gefunden. Sie besteht darin, das
beforeunload
Ereignis zu verwenden und dann den Handler zurückzubringennull
. Dadurch wird der gewünschte Code ausgeführt, ohne dass ein Bestätigungsfeld angezeigt wird. Es geht ungefähr so:Hoffe das hilft.
quelle
return false;
macht das gleiche (dh verhindert das Standardverhalten) und es ist semantisch korrekter.Manchmal möchten Sie den Server möglicherweise darüber informieren, dass der Benutzer die Seite verlässt. Dies ist beispielsweise nützlich, um nicht gespeicherte Bilder zu bereinigen, die vorübergehend auf dem Server gespeichert sind, um diesen Benutzer als "offline" zu markieren oder um zu protokollieren, wenn die Sitzung beendet ist.
In der Vergangenheit haben Sie eine AJAX-Anforderung in der
beforeunload
Funktion gesendet , dies hat jedoch zwei Probleme. Wenn Sie eine asynchrone Anforderung senden, gibt es keine Garantie dafür, dass die Anforderung korrekt ausgeführt wird. Wenn Sie eine synchrone Anfrage senden, ist diese zuverlässiger, aber der Browser bleibt hängen, bis die Anfrage abgeschlossen ist. Wenn dies eine langsame Anfrage ist, wäre dies eine große Unannehmlichkeit für den Benutzer.Zum Glück haben wir jetzt
navigator.sendBeacon()
. Mithilfe diesersendBeacon()
Methode werden die Daten asynchron an den Webserver übertragen, wenn der Benutzeragent die Möglichkeit dazu hat, ohne das Entladen zu verzögern oder die Leistung der nächsten Navigation zu beeinträchtigen. Dies löst alle Probleme bei der Übermittlung von Analysedaten: Die Daten werden zuverlässig gesendet, asynchron gesendet und haben keinen Einfluss auf das Laden der nächsten Seite. Hier ist ein Beispiel für seine Verwendung:sendBeacon()
wird unterstützt in:Es wird derzeit NICHT unterstützt in:
Hier ist eine Polyfüllung für sendBeacon (), falls Sie Unterstützung für nicht unterstützte Browser hinzufügen müssen. Wenn die Methode im Browser nicht verfügbar ist, wird stattdessen eine synchrone AJAX-Anforderung gesendet.
quelle
http://example.com/script.php?token=something&var1=val1&var2=val2
das Senden dieser Werte in GET zu senden .jQuery-Version:
Update : jQuery 3:
Danke Garrett
quelle
In der Dokumentation hier wird empfohlen, das Ereignis onbeforeunload abzuhören und / oder einen Ereignis-Listener im Fenster hinzuzufügen.
Sie können auch einfach die Eigenschaften .onunload oder .onbeforeunload des Fensters mit einer Funktion oder einer Funktionsreferenz füllen.
Obwohl das Verhalten nicht für alle Browser standardisiert ist, gibt die Funktion möglicherweise einen Wert zurück, den der Browser anzeigt, wenn bestätigt wird, ob die Seite verlassen werden soll.
quelle
Sie können verwenden
window.onbeforeunload
.quelle
Das Ereignis wird aufgerufen
beforeunload
, sodass Sie eine Funktion zuweisen könnenwindow.onbeforeunload
.quelle
Sie können so etwas ausprobieren:
quelle