window.onbeforeunload und window.onunload funktionieren nicht in Firefox, Safari, Opera?

77

In meiner Chat-Anwendung muss ich eine Bestätigung vom Benutzer erhalten, wenn meine Anwendung geschlossen wird.

Also habe ich die window.onbeforeunloadzur Bestätigung und window.onunloadfür verwendet logout().

  1. Beide Funktionen funktionieren jedoch in IE und Chrome. (Anwendung funktioniert gut)

  2. window.onbeforeunload funktioniert nicht in Opera und meine Nachricht wird in Firefox nicht angezeigt.

  3. window.onunload funktioniert nicht in Safari, Opera und Firefox.

Mein JavaScript-Code lautet:

// Used for confirmation, to closing the window 
window.onbeforeunload = function () {

    return  "Are you sure want to LOGOUT the session ?";
}; 

// Used to logout the session, when browser window was closed 
window.onunload = function () {

    if((sessionId != null)&&(sessionId!="null")&& (sessionId != ""))
        logout();
};

Ich habe die gleiche Funktion auch mit JQuery ausprobiert.

<script type="text/javascript">

    $(window).on('beforeunload', function() {
        return 'Are you sure want to LOGOUT the session ?';
    });

    $(window).unload(function() {
        if ((sessionId != null) && (sessionId != "null") && (sessionId != "")) {
            logout();
        }
    });
    
</script>
Menschliches Wesen
quelle
Funktioniert auf meinem Firefox, außer dass die Nachricht nicht die ist, die Sie gesendet haben. jsfiddle.net/yhx6d
Fabrício Matté
Vielen Dank für Ihre Antwort ... Ja Nachricht wird nicht displayed.Also logout () ist nicht working.It Mittel window.onunload () nicht funktioniert?
Mensch
window.onbeforeunload und window.onunload funktionieren nicht in der Oper?
Mensch
1
Opera unterstützt nicht onbeforeunload und seine Unterstützung ist onunloadunvollständig.
Marcel Korpel
1
Bitte überprüfen Sie stackoverflow.com/questions/5548505/… auf Firefox-Problem
Mymotherland

Antworten:

93

Leider werden die von Ihnen verwendeten Methoden in diesen Browsern nicht unterstützt. Um meine Antwort (dieses nicht unterstützende Verhalten) zu unterstützen, habe ich unten Links angegeben.

onbeforeunloadund onunloadnicht arbeiten in opera... um dies zu unterstützen

onbeforeunload in Opera
http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/

Obwohl das onunloadEreignis nicht vollständig funktioniert, können Sie onunloadeine Warnung anzeigen, wenn ein Benutzer auf einen Link klickt, um von einer Seite mit einem nicht gespeicherten Formular weg zu navigieren.

onunloadnicht arbeiten in safari... um dies zu unterstützen

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

Sie können lieber versuchen, das pagehideEreignis im Safari-Browser anstelle von zu verwenden onunload.

onunloadnicht arbeiten in firefox... um dies zu unterstützen

https://bugzilla.mozilla.org/show_bug.cgi?id=681636

Auch in FF müssen sie noch eine Lösung finden

Wünsche dir viel Glück Prost.

Freakyuser
quelle
40
Ich habe dir +50 Kopfgeld gegeben. Weil du viel gearbeitet hast, um diese vorgeschlagene Antwort zu erhalten. Und es wird bei anderen Fragen geholfen.
Mensch
3
irgendwelche Updates? immer noch nicht unterstützt ?, irgendwelche Problemumgehungen?
Francisco Corrales Morales
Der Link, den Sie zur Unterstützung der Anweisung freigegeben haben, die onunloadin Firefox nicht funktioniert, ist gemeint, wenn sich die Seite nur in einer Popup-Situation befindet. "window.onUnload funktioniert nicht, wenn sich die Seite in einem Popup befindet"
Nick Rolando
43

Hier ist die Arbeitslösung für dh Firefox und Chrom:

var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable

            myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
                var confirmationMessage = 'Are you sure to leave the page?';  // a space
                (e || window.event).returnValue = confirmationMessage;
                return confirmationMessage;
            });
faisale
quelle
@ user3253009.Wie findest du die Antwort hier?
KumarHarsh
Welche Antwort @KumarHarsh?
Faisale
@ user3253009 Wenn ein Popup mit "Auf Seite bleiben" oder "Seite verlassen" angezeigt wird, können wir die Antwort abfangen, ob der Benutzer auf welche Schaltfläche geklickt hat.
KumarHarsh
nein @KumarHarsh Sie können die Antwort nicht abfangen, es ist ein Browserverhalten, entweder können Sie bleiben oder die Seite verlassen.
Faisale
2
@ user3253009, großartig! Aber anscheinend funktioniert es nicht auf Safari auf dem iPhone. Gibt es eine mögliche Problemumgehung dafür?
user2335065
17

Ich konnte es mit jQuery's in IE und FF zum Laufen bringen:

$(window).bind('beforeunload', function(){

});

statt: entladen, entladen oder vor dem Entladen

Nathan Hayfield
quelle
@ JavaPlayer Es scheint für mich in Firefox 26.x zu funktionieren ... Haben Sie nach anderen Javascript-Fehlern gesucht? Es funktioniert weiterhin für mich.
Nathan Hayfield
@ Nathanhayfield Das funktioniert gut, aber es gibt ein Popup. Wie könnte ich das ignorieren?
WP Learner
@ Nathanhayfield Ich habe es auch versucht und es gibt eine Warnung zur Bestätigung. Warum zeigt es? Es gibt keine Warnung in meiner Funktion / Code
WP Learner
14

Ich habe die Lösung für onunloadalle Browser außer Opera erhalten, indem ich die asynchrone Ajax-Anforderung in eine synchrone Anforderung geändert habe.

xmlhttp.open("POST","LogoutAction",false);

Es funktioniert gut für alle Browser außer Opera .

Menschliches Wesen
quelle
es funktioniert in Firefox, aber leider sagt MDN, es ist angeblich veraltet
Oldboy
6

Das Ereignis onunload wird nicht in allen Browsern aufgerufen. Schlimmer noch, Sie können den Rückgabewert des Ereignisses onbeforeunload nicht überprüfen. Dies verhindert, dass wir tatsächlich eine Abmeldefunktion ausführen.

Sie können dies jedoch umgehen.

Rufen Sie als erstes im Ereignis onbeforeunload die Abmeldung auf. Dann fordern Sie den Benutzer auf. Wenn der Benutzer die Abmeldung abbricht, melden Sie sich mithilfe des onfocus-Ereignisses automatisch wieder an. Ein bisschen rückwärts, aber ich denke, es sollte funktionieren.

'use strict';

var reconnect = false;

window.onfocus = function () {
  if (reconnect) {
    reconnect = false;
    alert("Perform an auto-login here!");
  }
};

window.onbeforeunload = function () {
  //logout();
  var msg = "Are you sure you want to leave?";
  reconnect = true;
  return msg;
};
Spielraum
quelle
3
Scheint eine sehr unsichere Sache zu sein. Um den Benutzer automatisch wieder anmelden zu können, müssen die Anmeldeinformationen im Browser gespeichert werden, sodass ein abgemeldeter Benutzer grundsätzlich von jedem angemeldet werden kann.
Niclas
2

Firefox zeigt einfach keine benutzerdefinierten Nachrichten vor dem Herunterladen an. Mozilla sagt, dass sie Endbenutzer vor schädlichen Websites schützen, auf denen möglicherweise irreführender Text angezeigt wird.

anoldermark
quelle