2012-08-29 19 views
10

Este código funciona bien en Firefox, pero ya no puedo hacer que el evento de descarga funcione en Chrome. ¿Chrome dejó de admitir el evento de descarga?No puedo desencadenar el evento de descarga en Chrome

Este es mi código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title></title> 

<script type="text/javascript" src="../jquery/jquery.js"></script> 

<script type="text/javascript"> 

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME 
    window.addEventListener("pagehide", pageHidden, false); 

    window.onunload = function() { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD 

    $(window).unload(function() { //WORKS ON FIREFOX BUT NOT IN CHROME 
     alert("Are you sure 3?"); 
    }); 

</script> 
</head> 

<body> 
TEST WEBSITE 
<a href="http://www.iamawesome.com">external link</a> 
</body> 
</html> 

¿Cómo puedo obtener el evento de descarga para trabajar en Chrome?

Gracias!


RESPUESTA: No pruebe el evento de descarga con alertas;)

+1

Posible engaño: http://stackoverflow.com/questions/803887/can-i-pop-up-a-confirmation-dialog-when-the-user-is-closing-the-window-in-safari –

+0

no estás activando nada en ningún lugar de tu código. solo estás vinculando a los controladores. – jbabey

+0

Verifique [este informe de error] (http://bugs.jquery.com/ticket/10509). En resumen, no funcionará en Chrome; intente utilizar el controlador '.onunload' en su lugar, pero incluso eso podría ser 'arreglado' también.) – raina77ow

Respuesta

14
window.onunload = alert("Are you sure 2?"); 

Esto es incorrecto. Está configurando onunload al resultado de alert, es necesario establecer a una función:

window.onunload = function(){ 
    alert("Are you sure?"); 
} 

Si desea utilizar jQuery, esto funcionará en todos los navegadores.

$(window).unload(function() { 
    alert("Are you sure?"); 
}); 

NOTA: Podría parecer como que no funciona en Chrome, pero lo es. Eso es porque Chrome bloquea alert s en el evento onunload.

+1

Ese era el problema. Chrome estaba bloqueando todas mis alertas. Intenté una consola.log y funciona bien. Gracias por la respuesta rápida ! –

+0

De nada :-) –

+2

Si usa alertas, debería ver un error en la consola de Chrome. –

2

Probar:

window.onbeforeunload = function() { 
    // code 
}; 

o

window.onpagehide = function() { 
    // code 
}; 
+0

Gracias Korikulum! Intenté esto pero no está mostrando el mensaje de alerta que escribo dentro de cada función. –

+0

on pagehide es un evento útil para conocer, pero no puede confiar en que se llame cada vez que una página desaparece.Por ejemplo, si inicia una nueva pestaña y luego cierra todo el navegador, es posible que el evento no se active. –

1

Usted no activan nada - acaba de ejecutar la expresión que desea agregar como un manejador:

window.onunload = function(event) { 
    alert("Are you sure 2?"); 
}; 
+0

Todavía no funciona, puedo salir de la página y no aparece el mensaje de alerta :( –

1

Según lo que he leído, parece que Chrome bloquea las alertas una vez que se ha activado ese evento. Puede ejecutar algunas funciones, sin embargo, parece que no todo lo que interactúa con el usuario.

De window.onbeforeunload in Chrome: what is the most recent fix?, parece que, si todo lo que quiere hacer es mostrar un mensaje de confirmación, debe hacerlo devolviendo una cadena con el mensaje de la función que estableció como devolución de llamada.

window.onbeforeunload = function() { 
    // Some wrap up code (no alerts, confirms, redirects, etc) 
    return 'My confirmation messsage'; 
} 

Aparecerá el texto "Mi mensaje de confirmación" en un diálogo de confirmación elegido por Chrome. Firefox documenta este comportamiento here.

+0

Gracias, esto funcionó para mí y encajó bien con mi diseño actual – Callat

Cuestiones relacionadas