javascript - example - window.onbeforeunload y window.onunload no funciona en Firefox, Safari, Opera?
onbeforeunload personalizado (6)
En mi aplicación de chat necesito obtener la confirmación del usuario, cuando se cierra mi aplicación.
Así que utilicé la window.onbeforeunload
Antes de window.onbeforeunload
para la alerta de confirmación y window.onunload
para logout ().
Pero ambas funciones funcionan en IE y Chrome. (La aplicación funciona bien)
window.onbeforeunload
no funciona en Opera y mi mensaje no se mostrará en Firefox.window.onunload
no funciona en Safari, Opera y Firefox.
Mi código javaScript será,
// 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();
};
También probé la misma función con 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>
Aquí está la solución de trabajo para, por ejemplo, firefox y cromo:
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;
});
Desafortunadamente, los métodos que está utilizando no son compatibles en esos navegadores. Para apoyar mi respuesta (este comportamiento insolidario) he dado enlaces a continuación.
onbeforeunload
y de que no se onunload
en opera
... para apoyar esto
antes de descargar en Opera
http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/
Aunque el evento onunload
no funciona por completo, puede usar onunload
para mostrar una advertencia si un usuario hace clic en un vínculo para navegar desde una página que no tiene un formulario guardado.
onunload
no funciona en safari
... para apoyar esto
https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
Puede intentar usar el evento pagehide
en el navegador safari en lugar de onunload
.
onunload
no funciona en onunload
... para apoyar esto
Todavía tienen que encontrar una solución en FF
Les deseo buena suerte.
El evento onunload no se llama en todos los navegadores. Peor aún, no puede verificar el valor de retorno del evento onbeforeunload. Eso nos impide preformar una función de cierre de sesión.
Sin embargo, puedes hackear esto.
Cierre de sesión de llamada en primer lugar en el evento onbeforeunload. luego avisa al usuario. Si el usuario cancela su sesión, inicie sesión de nuevo automáticamente utilizando el evento onfocus. Un poco al revés, pero creo que debería funcionar.
''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 simplemente no muestra anuncios personalizados antes de descargar. Mozilla dice que protegen a los usuarios finales de sitios maliciosos que pueden mostrar texto engañoso.
Pude hacerlo funcionar en IE y FF con jQuery''s:
$(window).bind(''beforeunload'', function(){
});
en lugar de: descargar, onunload o onbeforeunload
onunload
la solución para onunload
en todos los navegadores, excepto Opera, al cambiar la solicitud asíncrona Ajax en solicitud síncrona.
xmlhttp.open("POST","LogoutAction",false);
Funciona bien para todos los navegadores excepto Opera .