Parece que Apple se ha deshabilitado la ventana.evento onbeforeunload para dispositivos iOS (iPhone, iPad, iPod Touch). Por desgracia no puedo encontrar ninguna documentación por qué este caso no funciona en Mobile Safari.

¿Alguien sabe si hay una alternativa fiable para esta función? El navegador de Android aparece para apoyar el bien, y el escritorio de Safari aplicación también es compatible con el evento onbeforeunload sin problema.

InformationsquelleAutor 8three | 2010-11-08

2 Comentarios

  1. 17

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

    Estoy usando window.unload y funciona bien en ios navegadores (aunque si se mira La documentación de Apple parece ser obsoleto y se recomienda el uso de la document.pagehide)

    • +1 para el document.pagehide sugerencia. Exactamente lo que necesito!
    • Ni pagehide ni descargar parecen estar trabajando en iOS 9 cuando el usuario vuelve a cargar la página.
  2. 1

    Si realmente lo necesita, que no sólo obtener todos los enlaces, formas y objetos DOM que tiene un controlador de cambio de la url y hacer que esas esperar hasta que haya hecho lo que usted desea.
    Para los enlaces, los obtiene por getElementsByTagName, compruebe si el href comienza con algo más que un # y sólo tiene que añadir su onbeforeunload función de agregar onclick (que será invocado antes de que el atributo href es mirado).
    Mismo por la forma, pero con onsubmit.
    Y, finalmente, para los elementos de cambiar el atributo href con JavaScript, usted debe asegurarse de que cuando se agrega el lsitener que usted llame a su onbeforeunlaod función (o, si usa el DOM0 o DOM1 oyentes, usted puede agregar algunos de la clase y, a continuación, utilizar un global script que comprueba todos los elementos con la clase y la añade a la escucha de eventos con un cierre.

    Pero usted debe normalmente ser capaz de evitar el uso de este evento (probablemente con el uso de cookies para almacenar lo que quería enviar a cada x segundos y permitiendo, en el peor de los casos, tienen un vistazo la próxima vez que el usuario carga una página y, en el mejor de los casos, ser capaz de enviar una petición Ajax en onbeforeunload o onunload que, incluso si se envía sólo los encabezados http, woudl permitir que usted consiga lo que usted desea).

    • Gracias Xavier, todas las posibilidades, pero todas estas requieren una gran cantidad de DOM modificación que en el caso de que mi solicitud sea poco práctico ya que podría interferir con el funcionamiento de las páginas alojadas.
    • No es necesario agregar el evento en cada enlace y así sucesivamente, usted puede utilizar el evento la delegación. Usted puede poner uno en el cuerpo y a utilizar el correo.srcElement || e.de destino y, a continuación, comprobar si va a cambiar la dirección url. De esta manera, no es necesario puesto que muchos de los elementos. Pero es posible que aún tenga que poner la onsubmit en los formularios themselfves… no estoy seguro de eso.
    • Cualquiera de las opciones para el escenario el usuario es en realidad el cierre de la página, en contraposición a moverse de una página a otra a través de un elemento?
    • Nope. Si estuviese en un equipo, puede detectar el ratón fuera de la ventana y estar listos para ello. Lo mejor sería decirle al servidor «todavía estoy aquí» todo el tiempo por lo que se puede deducir que has dejado cuando no, por lo que poner un tiempo de espera del servidor. Sería mejor utilizar websockets para que en lugar de muchas de las llamadas Ajax. Aparte de eso, la única cosa que puedo pensar es siempre fuerza el usuario también tiene algo de una de enviar el mensaje a onblur ( y tal vez agregar un poco mientras que el verdadero después de). De todos modos, nada puede utilizar sin molestar a los usuarios.

Dejar respuesta

Please enter your comment!
Please enter your name here