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
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).
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:
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';
})
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.
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';