web-dev-qa-db-fra.com

window.onbeforeunload et window.onunload ne fonctionnent pas dans Firefox, Safari, Opera?

Dans mon application de chat, je dois obtenir la confirmation de l'utilisateur lorsque mon application se ferme.

J'ai donc utilisé le window.onbeforeunload pour l'alerte de confirmation et window.onunload pour la déconnexion ().

  1. Mais les deux fonctions fonctionnent dans IE et Chrome (l'application fonctionne correctement).

  2. window.onbeforeunload ne fonctionne pas dans Opera et mon message ne sera pas affiché dans Firefox.

  3. window.onunload ne fonctionne pas dans Safari, Opera et Firefox.

Mon code javaScript sera,

// 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();
};

J'ai aussi essayé la même fonction avec JQuery,

<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>
72
Human Being

J'ai obtenu la solution pour onunload dans tous les navigateurs sauf Opera en modifiant la demande asynchrone Ajax en demande synchrone.

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

Cela fonctionne bien pour tous les navigateurs sauf Opera.

13
Human Being

Malheureusement, les méthodes que vous utilisez ne sont pas prises en charge dans ces navigateurs. Pour appuyer ma réponse (ce comportement peu favorable), j'ai fourni des liens ci-dessous.

onbeforeunload et onunload ne fonctionne pas dans opera... pour supporter ceci

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

Bien que l'événement onunload ne fonctionne pas complètement, vous pouvez utiliser onunload pour afficher un avertissement si un utilisateur clique sur un lien pour quitter une page contenant un formulaire non enregistré.

onunload ne fonctionne pas dans safari... pour supporter ceci

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

Vous pourriez plutôt essayer d’utiliser l’événement pagehide dans le navigateur de safari au lieu de onunload.

onunload ne fonctionne pas dans firefox... pour supporter ceci

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

Ils doivent encore trouver une solution en FF aussi

Je vous souhaite bonne chance, à votre santé.

86
Freakyuser

Voici la solution de travail pour, par exemple, Firefox et Chrome:

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;
            });
42
faisale

J'ai pu le faire fonctionner dans IE et FF avec jQuery:

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

});

au lieu de: décharger, onunload ou onbeforeunload

16
nathan hayfield

L'événement onunload n'est pas appelé dans tous les navigateurs. Pire, vous ne pouvez pas vérifier la valeur de retour de l'événement onbeforeunload. Cela nous empêche de mettre en place une fonction de déconnexion.

Cependant, vous pouvez en parler.

Appelez logout en premier lieu dans l'événement onbeforeunload. puis Inviter l'utilisateur. Si l'utilisateur annule sa déconnexion, reconnectez-le automatiquement à l'aide de l'événement onfocus. Un peu en arrière, mais je pense que cela devrait fonctionner.

'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;
};
5
leeway

Firefox ne montre simplement pas les messages personnalisés onbeforeunload. Mozilla dit qu'il protège les utilisateurs finaux contre les sites malveillants susceptibles de contenir des textes trompeurs.

2
anoldermark