2010-05-04 10 views
5

? Tengo una función que se activa cuando el usuario cierra su navegador y coloco el código en la función "window.onbeforeunload".¿Hay alguna forma de evitar que el evento antes de la descarga se desencadene al usar Internet Explorer

Lo que pasa es que si recargo la página en Internet Explorer, el evento onbeforeunload también se activará, lo cual es un problema porque solo quiero que se dispare solo cuando el usuario cierra o navega fuera de la página actual pero no en una página de actualización/recarga.

Por lo tanto, no estoy seguro de si onbeforeunload está destinado a activarse incluso en una página de actualización/recarga y si está destinado a, entonces ¿hay otra manera de evitarlo? Gracias

Respuesta

0

No hay una manera inteligente de evitarlo. Cualquier acción de descarga en la página desencadenará los eventos unload y beforeunload y no hay forma de saber la diferencia entre una actualización y una navegación.

Puede intentar un par de cosas, pero no hay un método del 100%. Por ejemplo, la captura de la F5 o Ctrl +R teclas identificarían una actualización, para lo cual se podía desarmar el manejador onbeforeunload, pero no iba a funcionar para los usuarios que hagan clic en el refresco/botón de recarga en su barra de herramientas. Puede adjuntar un controlador de eventos a todos los clics en un elemento <a> o cualquier <form>onsubmit s, pero esto no ayudaría a los usuarios que escriban una nueva dirección en la barra de direcciones de su página.

0

Incluso si usa XMLHttprequest para actualizar, IE tiene un problema. Tienes que llamar a la función de JavaScript que contiene el XMLHTTPRequest, por ejemplo,

<a href="javascript:void(0)" onclick="addContent();">click to add content</a> 

desencadenará un evento onbeforeunload en IE, pero no en Safari o Firefox.

Una solución que se va a trabajar en algunas situaciones es para controlar el evento condicional y lo apaga cuando se desea cargar el contenido a continuación, volver a encenderla

var guard = true; 
function myOnbeforeunloadHandler() 
{ 
    if(guard) 
    { 
     return "you are about to leave the page and lose data"; 
    } 
} 

function addContent() 
{ 
    getElementById("myDiv").html = "<p>some content</p>"; 
    guard = true; 
} 

<a href="javascript:void(0) onclick="guard=false;addContent();> click to add content</a> 
+0

O bien, otra solución es no crear ningún vínculo, sino tener algún otro elemento de contenido (span o div) y adjuntar clic para que no tenga problemas en IE. Supongo que IE está tratando clic en cada enlace como intento de descarga. – ivanjovanovic

Cuestiones relacionadas