2012-06-05 26 views
8

Estoy intentando ejecutar una función cuando el usuario deja (cierra) el navegador o la página y lo tengo trabajando en todos los navegadores, excepto en Chrome.Chrome antes de descargar el evento cuando la pestaña (o navegador) se cierra

Chrome ejecuta la función con éxito si navego fuera de la página pero no la ejecuto si cierro la pestaña o cierro el navegador por completo.

La función que estoy ejecutando al final crea una imagen y envía algunos datos a mi servidor (similar a cualquier informe analítico) ejemplo: img.src = "url? Data = yyy". Esta imagen se crea dinámicamente con js.

¿Alguien puede arrojar algo de luz sobre cuál podría ser el problema? me han reducido a un par de razones:

1) No estoy usando el evento correcto cuando se cierra la pestaña (es decir, no beforeunload)

2) Chrome realmente ejecuta la función de la imagen, pero doesn No se envían porque los navegadores/página se cierran.

Cualquier ayuda es apreciada. Gracias.

Aquí está el código de ejemplo:

if(window.addEventListener){ 
    window.addEventListener("beforeunload", page_unload, false);   
} 
function page_unload(){ 
    var img  = new Image(); 
    var img_src = "http://www.myurl.com?data=yyy" 
    img.src = img_src; 
} 
+0

cada pestaña de cromo se ejecuta en su propio proceso ¿no? Por lo tanto, si tiene algo que se ejecuta en la pestaña cerrar, incluso si se ejecuta, el proceso que contiene el código se detendrá. De lo contrario, es posible que veas un montón de pestañas colgantes de Chrome abiertas, que nunca había visto antes. –

+1

a la derecha, cada pestaña es su propio proceso ... y tendría sentido que cualquier código asociado con ese proceso también termine. Firefox maneja esta situación con elegancia y hace lo que necesito que haga, así que esperaba que me perdiera algo con respecto a Chrome – Nik

+3

Lo que estás tratando de hacer no es posible. El evento 'onbeforeunload' solo puede usarse para arrojar un cuadro de diálogo para animar al usuario a permanecer en su página (devolviendo el texto para avisarle al usuario): cuando el evento se dispara, no tiene tiempo izquierda para hacer una solicitud HTTP. – duskwuff

Respuesta

0

que tenían un problema relacionado con Chrome y lo resolvió usando jQuery:

$(window).unload(function() { 
    //Call your function 
    page_unload(); 
}); 

Por alguna razón jQuery descargar caso funciona mejor en Chrome en algunos casos donde JavaScript beforeunload no funciona correctamente.

+0

no funciona para mí – TMS

Cuestiones relacionadas