personalizado example event close chrome beforeunload javascript javascript-events jquery

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 ().

  1. Pero ambas funciones funcionan en IE y Chrome. (La aplicación funciona bien)

  2. window.onbeforeunload no funciona en Opera y mi mensaje no se mostrará en Firefox.

  3. 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

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

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 .