Intentando detectar el evento de cierre del navegador

Resuelto vjeta asked hace 10 años • 11 respuestas

He probado muchos métodos para detectar eventos de cierre del navegador a través de jQuery o JavaScript. Pero lamentablemente no he podido detectar el cierre. el onbeforeunloadyonunload tampoco funcionan.

¿Cómo detecto la ventana close, unloado beforeunloadlos eventos?

vjeta avatar Dec 31 '13 13:12 vjeta
Aceptado

¿Has probado este código?

window.onbeforeunload = function (event) {
    var message = 'Important: Please click on \'Save\' button to leave this page.';
    if (typeof event == 'undefined') {
        event = window.event;
    }
    if (event) {
        event.returnValue = message;
    }
    return message;
};

$(function () {
    $("a").not('#lnkLogOut').click(function () {
        window.onbeforeunload = null;
    });
    $(".btn").click(function () {
        window.onbeforeunload = null;
});
});

La segunda función es opcional para evitar que se le solicite al hacer clic en elementos #lnkLogOuty .btn.

Una cosa más: el mensaje personalizado no funcionará en Firefox (incluso en la última versión). Para obtener más detalles al respecto, vaya a este hilo.

Ravimallya avatar Dec 31 '2013 08:12 Ravimallya

Consultando varios artículos y haciendo algunas pruebas de prueba y error, finalmente desarrollé esta idea que me funciona perfectamente.

La idea era detectar el evento de descarga que se activa al cerrar el navegador. En ese caso, el mouse estará fuera de la ventana, apuntando al botón de cerrar ('X') .

$(window).on('mouseover', (function () {
    window.onbeforeunload = null;
}));
$(window).on('mouseout', (function () {
    window.onbeforeunload = ConfirmLeave;
}));
function ConfirmLeave() {
    return "";
}
var prevKey="";
$(document).keydown(function (e) {            
    if (e.key=="F5") {
        window.onbeforeunload = ConfirmLeave;
    }
    else if (e.key.toUpperCase() == "W" && prevKey == "CONTROL") {                
        window.onbeforeunload = ConfirmLeave;   
    }
    else if (e.key.toUpperCase() == "R" && prevKey == "CONTROL") {
        window.onbeforeunload = ConfirmLeave;
    }
    else if (e.key.toUpperCase() == "F4" && (prevKey == "ALT" || prevKey == "CONTROL")) {
        window.onbeforeunload = ConfirmLeave;
    }
    prevKey = e.key.toUpperCase();
});

La función ConfirmLeave mostrará el mensaje emergente predeterminado, en caso de que sea necesario personalizar el mensaje, luego devolverá el texto que se mostrará en lugar de una cadena vacía en la función ConfirmLeave() .

shiv avatar Oct 09 '2014 10:10 shiv

Pruebe el siguiente código que me funciona en el entorno Chrome de Linux. Antes de ejecutar, asegúrese de que jquery esté adjunto al documento.

$(document).ready(function()
{
    $(window).bind("beforeunload", function() { 
        return confirm("Do you really want to close?"); 
    });
});

Para simplificar, siga los siguientes pasos:

  1. abre http://jsfiddle.net/
  2. ingrese algo en el cuadro html, css o javascript
  3. intenta cerrar la pestaña en Chrome

Debería mostrar la siguiente imagen:

ingrese la descripción de la imagen aquí

Khamidulla avatar Dec 31 '2013 07:12 Khamidulla