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 ().
Mais les deux fonctions fonctionnent dans IE et Chrome (l'application fonctionne correctement).
window.onbeforeunload
ne fonctionne pas dans Opera et mon message ne sera pas affiché dans Firefox.
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>
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.
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
Ils doivent encore trouver une solution en FF aussi
Je vous souhaite bonne chance, à votre santé.
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;
});
J'ai pu le faire fonctionner dans IE et FF avec jQuery:
$(window).bind('beforeunload', function(){
});
au lieu de: décharger, onunload ou onbeforeunload
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;
};
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.