2011-08-01 8 views
24

¿Cuáles son las diferencias entre onbeforeunload y onunload? También tengo una pregunta específica relacionada con su uso en el iPad ... Tengo una página (myPage.html) en la que intento mostrar una alerta cuando la página está cerrada (es decir, se presiona X para cerrar la pestaña del iPad)Diferencia entre onforeforeload y onunload

Ahora traté de usar tanto window.onunload como window.onbeforeunload A continuación se encuentran mis hallazgos en el iPad;

  1. Usando window.onunload, soy capaz de obtener una alerta cuando el usuario navega a una página diferente de myPage.html (ya sea haciendo clic en algún enlace o haciendo una búsqueda en Google, mientras que en myPage.html). Sin embargo, no ocurre nada cuando la pestaña se cierra desde la vista minimizada (X)

  2. Usando window.onbeforeunload, no recibo una alerta incluso si el usuario navega a una página diferente de myPage.html O si cierra la pestaña (X) desde la vista minimizada.

¿Quería saber si hay alguna forma alternativa de solucionar este problema?

Gracias.

Respuesta

12

onunload es responsable de ejecutar una instrucción cuando la página está cerrada. También causa problemas con IE y AJAX.

onbeforeunload es más eficiente porque no se ejecuta en competencia con el cierre real de la ventana y se desencadena antes onunload

Sé Opera utiliza para no reconocer onbeforeunload - no estoy seguro si han fijado, pero siempre registrar el detector para que ambos sean seguros:

window.onunload = window.onbeforeunload = (function(){... 
+4

Thx mucho para eso ... ¿Alguna idea sobre la implementación del iPad? – testndtv

+16

window.onunload = window.onbeforeunload = (function() {..., ejecutará la función dos veces si el navegador no tiene problemas con ambos eventos. – noboundaries

16

Sumar con la American National Standard de AlienWebguy, para evitar llamadas duales en los navegadores que soportan ambos eventos,

var onBeforeUnLoadEvent = false; 

window.onunload = window.onbeforeunload= function(){ 
if(!onBeforeUnLoadEvent){ 
    onBeforeUnLoadEvent = true; 
    //your code here 
    } 
}; 
5

onbeforeunload:

  • Llamado antes de la descarga comienza
  • MDN tells me puede cancelar el cierre de la página utilizando event.preventDefault();
  • o devolviendo un valor no nulo (es decir, un valor!= 0), la página mostrará un diálogo de confirmación que permite al usuario elegir para cancelar el cierre
  • MDN también dice Opera 12 y hasta onbeforeunload apoyo - parece que está soportado por un tiempo ahora

onunload:

  • llama una vez que la descarga ha comenzado, pero antes de cualquier cancelación de asignación de recursos (no es claro para mí qué es exactamente se realiza durante este período)
  • es demasiado tarde para cancelar la página de cerca a esta p oint

La única razón que se me ocurre por qué desea utilizar onunload sobre onbeforeunload estaría donde su código onunload podría tomar algún tiempo significativo, y no desea que el usuario vea una ventana que bloquea al cerrar .

7

Una diferencia significativa (aparte de la cancelabilidad) entre onbeforeunload y onunload es que la primera se activa para los enlaces de descarga y la segunda no. Ejemplo: <a href="https://somewhere.com/thething.zip">download</a> activará el controlador onbeforeunload, pero no el onunload.

+4

No puedo reproducir esto en Chrome. ¿Tiene alguna documentación sobre esto? –