webentwicklung-frage-antwort-db.com.de

window.onbeUNunload in Chrome: Was ist die aktuellste Korrektur?

Offensichtlich ist window.onbeforeunload auf ziemlich viele Probleme mit Chrome gestoßen, wie ich es bei allen Problemen gesehen habe. Was ist die aktuellste Arbeit?

Das Einzige, was ich noch am Arbeiten habe, ist this :

window.onbeforeunload = function () { return "alert" };

Wenn ich jedoch "alert" mit "alert" ("blah") austausche, bekomme ich nichts von Chrome.

Ich habe in diese Frage gesehen, dass Google dies absichtlich blockiert. Gut für sie ... aber was ist, wenn ich einen Anruf AJAX machen möchte, wenn jemand das Fenster schließt? In meinem Fall möchte ich wissen, wann jemand den Chatroom auf meiner Website verlassen hat, was durch das Schließen des Fensters angezeigt wird. 

Ich möchte wissen, ob es einen Weg gibt 
(a): Korrigieren Sie das window.onbeununload-Aufruf, sodass ich AJAX dort einfügen kann
oder
(b): Sie können auf andere Weise feststellen, ob ein Fenster in Chrome geschlossen wurde

22
varatis

Antworten:

$(window).on('beforeunload', function() {
    var x =logout();
    return x;
});
function logout(){
        jQuery.ajax({
        });
        return 1+3;
}

Ein bisschen Mix und Match, aber es hat für mich funktioniert. 1 + 3 stellt sicher, dass die Abmeldefunktion aufgerufen wird (Sie sehen 4, wenn sie beim Verlassen des Popup-Fensters erfolgreich war).

14
varatis

Hier ist ein einfacher Ansatz.

$(window).on('beforeunload', function() {
    return "You should keep this page open.";
});

Die zurückgegebene Nachricht kann beliebig sein, einschließlich der leeren Zeichenfolge, wenn Sie der von Chrome bereits angezeigten Nachricht nichts hinzufügen möchten. Das Ergebnis sieht so aus:

enter image description here

3
Keith

Nach MDN ,

Die Funktion sollte der Eigenschaft returnValue einen Zeichenfolgewert zuweisen des Event-Objekts und geben dieselbe Zeichenfolge zurück.

Dies ist das Folgende

window.addEventListener( 'beforeunload', function(ev) { 
    return ev.returnValue = 'My reason';
})
2
kisp

Mit 69.0.3497.92 hat Chrome den Standard nicht erfüllt. Es gibt jedoch einen Fehlerbericht eingereicht und eine Überprüfung ist in Bearbeitung.

  • Chrome erfordert, dass returnValue anhand des Ereignisobjekts festgelegt wird, nicht des vom Handler zurückgegebenen Werts.
  • Die Standardzustände Diese Aufforderung kann gesteuert werden, indem das Ereignis abgebrochen oder der Rückgabewert auf einen Nicht-Nullwert gesetzt wird.
  • Der Standard besagt, dass Autoren Event.preventDefault () anstelle von returnValue verwenden sollten.
  • Der Standardzustand dass die dem Benutzer angezeigte Nachricht nicht anpassbar ist.

window.addEventListener('beforeunload', function (e) {
    // Cancel the event as stated by the standard.
    e.preventDefault();
    // Chrome requires returnValue to be set.
    e.returnValue = '';
});
    
window.location = 'about:blank';

1
Trevor Karjanis