¿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 en el iPad)

Ahora intenté usar window.onunload y window.onbeforeunload. A continuación se encuentran mis hallazgos en el iPad;

  1. Al usar window.onunload, puedo recibir una alerta cuando el usuario navega a una página diferente desde myPage.html (ya sea haciendo clic en algún enlace o haciendo una búsqueda en Google mientras está en myPage.html). Sin embargo, no sucede nada cuando la pestaña se cierra desde la vista minimizada (X)

  2. Usando window.onbeforeunload, tampoco recibo una alerta incluso si el usuario navega a una página diferente desde 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.

38
testndtv 1 ago. 2011 a las 11:51

3 respuestas

La mejor respuesta

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 activa antes de onunload

Sé que Opera solía no reconocer onbeforeunload; no estoy seguro de si lo han solucionado, pero siempre registro al oyente para que ambos estén seguros:

window.onunload = window.onbeforeunload = (function(){...
16
AlienWebguy 1 ago. 2011 a las 07:55

Esto funciona en todos los navegadores que he probado (varias versiones de FF, IE 7 y 8, Chrome 12.0.x, Y Safari 5.1). Si alguien puede explicar por qué me encantaría escucharlo, de lo contrario, asumiré que se trata de un error en Safari 4 o JSFiddle. De cualquier manera, me estoy moviendo hacia navegadores más actuales.…

8
dvdplm 7 ago. 2015 a las 12:56

Agregando con Ans de AlienWebguy, para evitar llamadas duales en los navegadores que admiten ambos eventos,

var onBeforeUnLoadEvent = false;

window.onunload = window.onbeforeunload= function(){
if(!onBeforeUnLoadEvent){
  onBeforeUnLoadEvent = true;
  //your code here
  }
};
19
noboundaries 30 ago. 2017 a las 23:42