Heim  >  Artikel  >  Web-Frontend  >  Wie kann man zwischen einer Browseraktualisierung und einem Fensterschließen unterscheiden?

Wie kann man zwischen einer Browseraktualisierung und einem Fensterschließen unterscheiden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 04:54:02708Durchsuche

How to Distinguish Between a Browser Refresh and a Window Close?

Unterscheidung zwischen Aktionen zum Aktualisieren und Schließen des Browsers

Die Unterscheidung zwischen dem Aktualisieren einer Seite und dem Schließen eines Browsers kann schwierig erscheinen, da beide Aktionen ausgelöst werden das ONUNLOAD-Ereignis. Es gibt jedoch eine Lösung für dieses Rätsel.

Lösung:

Dieser Ansatz nutzt den lokalen HTML5-Speicher und die Server-Client-Kommunikation:

  1. ONUNLOAD-Handler: Fügen Sie auf der Seite mithilfe von einen On-Unload-Handler zum Fenster hinzu Pseudo-JavaScript:

    <code class="javascript">function myUnload(event) {
        if (window.localStorage) {
            window.localStorage['myUnloadEventFlag'] = new Date().getTime();
        }
        askServerToDisconnectUserInAFewSeconds(); // Synchronous AJAX call
    }</code>

    Diese Funktion:

    • Kennzeichnet die Seite als im lokalen Speicher entladen.
    • Benachrichtigt den Server asynchron, um die Verbindung des Benutzers in einem zu trennen wenige Sekunden.
  2. ONLOAD Handler: Fügen Sie am Körper einen On-Load-Handler hinzu:

    <code class="javascript">function myLoad(event) {
        if (window.localStorage) {
            var t0 = Number(window.localStorage['myUnloadEventFlag']);
            if (isNaN(t0)) t0 = 0;
            var t1 = new Date().getTime();
            var duration = t1 - t0;
            if (duration < 10 * 1000) {
                // Browser reload
                askServerToCancelDisconnectionRequest(); // Asynchronous AJAX call
            } else {
                // Tab/window close
                // Perform desired actions (e.g., do nothing)
            }
        }
    }</code>

    Diese Funktion:

    • Überprüft den Zeitunterschied seit dem vorherigen Entladeereignis.
    • Wenn weniger als 10 Sekunden vergangen sind, handelt es sich um ein Neuladen des Browsers.
    • Wenn mehr als 10 Sekunden vergangen sind, handelt es sich um ein Neuladen des Browsers ist ein Tab-/Fenster-Schließen.
  3. Serverinteraktion: Führen Sie auf dem Server eine Liste mit Trennungsanfragen und verwenden Sie einen Timer-Thread, um die Liste zu überprüfen. Verarbeiten Sie Verbindungstrennungsanfragen nach einer Zeitüberschreitung (z. B. 5 Sekunden) und behandeln Sie Stornierungen, wenn sie eingehen.

Diese Lösung dient zur Unterscheidung zwischen Tab-/Fensterschließungen, Neuladeaktionen, verfolgten Links und übermittelten Formularen. Es ist in Browsern mit HTML5-Local-Storage-Unterstützung anwendbar. Beachten Sie jedoch, dass es auf dem Entladeereignis basiert und möglicherweise nicht mit älteren Browsern wie MSIE7 kompatibel ist.

Das obige ist der detaillierte Inhalt vonWie kann man zwischen einer Browseraktualisierung und einem Fensterschließen unterscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn