webentwicklung-frage-antwort-db.com.de

window.onunload funktioniert im Chrome-Browser nicht ordnungsgemäß. Kann mir jemand helfen?

Ich habe diesen Code geschrieben 

function winUnload() {
    alert("Unload Window");
    MyMethod();
}

window.onunload = function() { winUnload(); }

Dieser Code funktioniert gut in IE und Firefox. Dieser Code funktioniert jedoch nicht in Chrome. Die Anweisungen alert("Unload Window"); und MyMethod(); funktionieren nicht.

31
Imran

Es gibt einige Aktionen, die im Entladevorgang nicht in Chrom funktionieren. Benachrichtigungs- oder Bestätigungsfelder sind solche Dinge.

Aber was ist möglich (AFAIK):

  1. Popups öffnen (mit window.open) - dies funktioniert jedoch nur, wenn der Popup-Blocker für Ihre Site deaktiviert ist
  2. Geben Sie eine einfache Zeichenfolge (in beforeunload) zurück, die ein Bestätigungsfeld auslöst, in dem der Benutzer gefragt wird, ob er die Seite verlassen möchte.

Beispiel für # 2:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});

Demo: http://jsfiddle.net/PQz5k/

52
Armin

Ich weiß, das ist alt, aber ich habe den Weg gefunden, um das Entladen mit Chrome zum Laufen zu bringen

window.onbeforeunload = function () {
  myFunction();
};
6
Carlos

Armin's Antwort ist so nützlich, danke. # 2 ist das Wichtigste, wenn Sie versuchen, Entladeereignisse einzurichten, die in den meisten Browsern funktionieren: Sie können nicht warnen () oder bestätigen (), aber die Rückgabe eines Strings generiert ein Bestätigungs-Modal.

Ich habe jedoch festgestellt, dass ich selbst bei der Rückgabe einer Zeichenfolge einige Browser-spezifische Probleme mit Mootools hatte (in diesem Fall Version 1.4.5). Diese Mootools-spezifische Implementierung funktionierte in Firefox hervorragend, führte jedoch nicht zu einem Bestätigungs-Popup in Chrome oder Safari: 

window.addEvent("beforeunload", function() {
    return "Are you sure you want to leave this page?";
});

Damit mein onbeforeonload-Ereignis über Browser hinweg funktioniert, musste ich den nativen JavaScript-Aufruf verwenden: 

window.onbeforeunload = function() {
    return "Are you sure you want to leave this page?";
}

Nicht sicher, warum dies der Fall ist oder ob es in späteren Versionen von Mootools behoben wurde.

5
Tracy

Sie können versuchen, das pagehide-Ereignis für Chrome and Safari zu verwenden.

Überprüfen Sie diese Links:

Wie erkennt man die Browserunterstützung für pageShow und pageHide?

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

3

Versuchen Sie window.onbeununload stattdessen für window.onunload für chrome . Sie können auch onbeforeunload vom body> - Tag aus aufrufen, das möglicherweise in Chrome funktioniert.

Es gibt jedoch ein Problem mit der Entladefunktion im Chrome-Browser. Bitte überprüfen

location.href funktioniert nicht in Chrome, wenn über das body/window unload-Ereignis aufgerufen wird

Danke, Nived

3
Nivedittan

Das Onunload-Ereignis wird nicht ausgelöst, wenn das Onload-Ereignis nicht ausgelöst wurde. Leider wartet das Onload-Ereignis auf den gesamten binären Inhalt (z. B. Bilder), und Inline-Skripts werden ausgeführt, bevor das Onload-Ereignis ausgelöst wird. DOMContentLoaded wird ausgelöst, wenn die Seite sichtbar ist, bevor Onload ausgeführt wird. Es ist jetzt Standard in HTML 5 , und Sie können auf Browserunterstützung prüfen . Beachten Sie jedoch, dass dies den <!DOCTYPE html> (zumindest in Chrome) erfordert. Ich kann jedoch kein entsprechendes Ereignis zum Entladen des DOMs finden. Ein solches hypothetisches Ereignis funktioniert möglicherweise nicht, da einige Browser das DOM in der Nähe halten, um die Funktion "Restore Tab" auszuführen.

Die einzige mögliche Lösung, die ich bisher gefunden habe, ist die Page Visibility API , die scheinbar den <!DOCTYPE html> erfordert.

1

Das funktioniert : 

var unloadEvent = function (e) {
    var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?";
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Webkit, Safari, Chrome etc.
};
window.addEventListener("beforeunload", unloadEvent);
1
Amulya Kashyap