personalizado metodo event ejemplo chrome beforeunload javascript ipad safari mobile-safari onbeforeunload

javascript - metodo - onbeforeunload personalizado



Diferencia entre onbeforeunload y onunload (4)

¿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 traté de usar tanto window.onunload como window.onbeforeunload A continuación se muestran mis hallazgos en el iPad;

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

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

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

Gracias.


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 } };


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 .


onbeforeunload :

  • Invocado antes de que comience la descarga
  • MDN me dice que puede cancelar el cierre de la página usando event.preventDefault();
  • o al devolver un valor no nulo (es decir, un valor! = 0), la página mostrará un cuadro de diálogo de confirmación que le permite al usuario elegir cancelar el cierre
  • MDN también dice que el soporte de Opera 12 y hasta ahora antes de la descarga - parece que lo soportó por un tiempo ahora

onunload :

  • Invocado después de que la descarga haya comenzado, pero antes de la desasignación de recursos (no tengo claro qué se hace exactamente durante este período)
  • Es demasiado tarde para cancelar el cierre de la página en este punto

La única razón por la que puedo pensar por qué desearía usar onunload onbeforeunload sería cuando su código de onunload podría tomar un tiempo significativo, y no quiere que el usuario vea una ventana que se cuelga al cerrar.


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 antes de la onbeforeunload , no estoy seguro si lo arreglaron, pero siempre registro el oyente para que ambos estén seguros:

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