2012-05-21 9 views
13

tengo este simple trozo de código -'beforeunload' Chrome Edición

$(window).bind('beforeunload', function(){ 
    alert("Good Bye") 
}); 

funciona muy bien con Firefox, Internet Explorer 8, pero no en Chrome. ¿Es un problema conocido o hay alguna alternativa para eso?

En realidad, lo que intento hacer es registrar los detalles siempre que el usuario intente cerrar el navegador.

function LogTime() 
{ 
    jQuery.ajax({ 
     type: "POST", 
     url: "log.php", 
     data: "", 
     cache: false, 
     success: function(response) 
     { 
     } 
    ); 
} 

$(window).bind('beforeunload', function(){ 
    LogTime(); 
}); 

Esto funciona bien en Firefox, pero no en Chrome

+1

Los cuadros de diálogo están bloqueados para 'onbeforeunload' en Chrome porque Chrome optó por hacerlo. – Joseph

+0

El equipo de Google Chromium recomienda encarecidamente que ** no ** use los cuadros de diálogo JavaScript ('alert()', 'confirm()' y 'prompt()') ya que indican que perjudican a los usuarios, por lo que probablemente bloqueen sin primero una interacción del usuario: https://developers.google.com/web/updates/2017/03/dialogs-policy Recomiendan utilizar la API de notificaciones: https://developer.mozilla.org/en-US/ docs/Web/API/Notifications_API –

Respuesta

13

devolver una cadena en su lugar:

$(window).on('beforeunload', function(){ 
    return "Good bye"; 
});​ 
+0

He editado mi pregunta, compruebe si es posible una solución – skos

+0

@Sachyn No conozco ninguna solución. Intenté algunos intentos para enviar datos asíncronos, pero el tráfico está bloqueado por Chrome. – Sampson

+0

Derecha. Incluso no puedo hacer que esto funcione en Chrome. Gracias por sus esfuerzos sin embargo. – skos

6

Trate a continuación:

$(window).on('beforeunload', function(){ 
    return "Good Bye"; 
}); 
+1

no entiendo. ¿Dónde está el "Adiós" usado? – Abhi

+0

Al 10/09/17, versión de Chrome 61.0.3163.100 (compilación oficial) (32 bits), no parece ser:/ – user1063287

4

que tenía que incluirlo en una jQuery (documento). listo para que funcione en Chrome

<script> 
    jQuery(document).ready( 
    function() { 
     jQuery(window).bind('beforeunload', 
     function (e) { 

      [code here] 

     } 
    ); 

    } 
); 
</script> 
2

Prueba esto:

function LogTime(){ 

jQuery.ajax({ 
    type: "POST", 
    url: "log.php", 
    data: "", 
    cache: false, 
    success: function(response){ 

    } 
}); 

}

$(window).bind('beforeunload', function(){ 
    LogTime(); 
    return "You're leaving?"; 
}); 

Parece que todo el tiempo que devolver una cadena para este evento al final del cuerpo de la función, puede ejecutar código antes de esa cadena .

1

probar este para todos los navegadores: -

window.addEventListener("beforeunload", function (e) { 

    var confirmationMessage = "\o/";  
    e.returnValue = confirmationMessage;   
    return confirmationMessage;  

}); 
+0

https://developer.mozilla.org/en-US/docs/ Web/Eventos/beforeunload –

0

Si necesita enviar algunos datos analíticos justo antes de la descarga del documento, elija navigator.sendBeacon() método en lugar del XMLHttpRequest.

El método sendBeacon() está diseñado para realizar el envío no bloqueante de una pequeña cantidad de datos.

Pero primero compruebe canIuse report, ya que el método aún no es compatible a nivel mundial.