2010-11-08 17 views
38

Parece que Apple ha desactivado la ventana. Antes de descargar el evento para dispositivos iOS (iPhone, iPad, iPod Touch). Lamentablemente, no encuentro ninguna documentación sobre por qué este evento no funciona en Mobile Safari.¿Hay alguna forma de utilizar window.onbeforeload en Mobile Safari para dispositivos iOS?

¿Alguien sabe si hay una alternativa confiable a esta función? Parece que el navegador de Android lo admite, y la aplicación de escritorio Safari también admite el evento onbeforeunload sin problemas.

+0

Este es un duplicado de [no window.onbeforeunload trabajando en ¿el iPad?] (http://stackoverflow.com/questions/3239834/window-onbeforeunload-not-working-on-the-ipad) –

Respuesta

1

Si realmente lo necesita, no puede obtener todos los enlaces, formularios y objetos DOM que tengan un controlador que cambie la URL y espere hasta que haya hecho lo que desea. Para obtener los enlaces, obténgalos por getElementsByTagName, compruebe si el href comienza con algo que no sea un # y simplemente agregue su función onbeforeunload add onclick (que se invocará antes de examinar el href). Lo mismo para los formularios pero con envío. Y finalmente, para los elementos que cambian el href con JavaScript, debes asegurarte de cuando agregas el lsitener que llamas tu función onbeforeunlaod (o, si usas escuchas DOM0 o DOM1, puedes simplemente agregar alguna clase y luego usar un script que comprueba todos los elementos con la clase y lo agrega al detector de eventos con un cierre.

Pero normalmente deberías evitar el uso de este evento (probablemente usando cookies para almacenar lo que quieres enviar cada x segundos y permite, en el peor de los casos, echarle un vistazo la próxima vez que el usuario carga una página y, en el mejor de los casos, poder enviar una solicitud Ajax antes de la descarga o al momento de la descarga, incluso si solo envía los encabezados http , le permitirá obtener lo que desea).

+0

Gracias Xavier, todas las posibilidades, pero todas requieren una gran cantidad de modificaciones DOM que en el El caso de mi aplicación no es práctico ya que podría interferir con el funcionamiento de las páginas alojadas. –

+0

No necesita agregar el evento en cada enlace, y así sucesivamente, puede usar la delegación de eventos. Puedes poner uno en el cuerpo y usar e.srcElement || e.target y luego verificar si cambiará la url. De esta manera, no necesitas poner tantos elementos. Pero es posible que aún necesites poner la solicitud en los formularios ellos mismos ... no estoy seguro de eso. – xavierm02

+1

¿Alguna de las opciones para el escenario en que el usuario está cerrando la página, en lugar de pasar a otra página a través de un elemento? –

13

Veo que es una vieja pregunta, pero me enfrenté a este problema recientemente.

estoy usando window.unload y funciona bien en los navegadores de iOS (aunque si nos fijamos en Apple documentation parece estar en desuso y recomiendan utilizar document.pagehide)

+1

+1 para la pista 'document.pagehide'. ¡Exactamente lo que necesito! –

+5

Ni la página ni la descarga parecen estar funcionando en iOS 9 cuando el usuario vuelve a cargar la página. – CpnCrunch

Cuestiones relacionadas