Detectar el cierre del navegador o de una pestaña
¿Existe algún código JavaScript/jQuery entre navegadores para detectar si el navegador o una pestaña del navegador se está cerrando, pero no debido a que se hace clic en un enlace?
Si le entiendo correctamente, querrá saber cuándo se cierra efectivamente una pestaña/ventana. Bueno, AFAIK, la única forma en JavaScript de detectar eso es usar eventos onunload
o onbeforeunload
.
Desafortunadamente (¿o afortunadamente?), esos eventos también se activan cuando abandona un sitio a través de un enlace o el botón Atrás de su navegador. Entonces esta es la mejor respuesta que puedo dar, no creo que puedas detectar de forma nativa un close
JavaScript puro. Corrígeme si me equivoco aquí.
De la documentación de MDN
Por algunas razones, los navegadores basados en Webkit no siguen las especificaciones del cuadro de diálogo. Un ejemplo casi transversal sería similar al siguiente ejemplo.
window.addEventListener("beforeunload", function (e) {
var confirmationMessage = "\o/";
(e || window.event).returnValue = confirmationMessage; //Gecko + IE
return confirmationMessage; //Webkit, Safari, Chrome
});
Este ejemplo para manejar todos los navegadores.
Solución simple
window.onbeforeunload = function () {
return "Do you really want to close?";
};
<body onbeforeunload="ConfirmClose()" onunload="HandleOnClose()">
var myclose = false;
function ConfirmClose()
{
if (event.clientY < 0)
{
event.returnValue = 'You have closed the browser. Do you want to logout from your application?';
setTimeout('myclose=false',10);
myclose=true;
}
}
function HandleOnClose()
{
if (myclose==true)
{
//the url of your logout page which invalidate session on logout
location.replace('/contextpath/j_spring_security_logout') ;
}
}
//Esto funciona en IE7, si estás cerrando una pestaña o un navegador con una sola pestaña