javascript - window.onbeforeunload no funciona en el iPad?
ios (7)
Este fragmento de JavaScript funciona para mí en Safari y Chrome en ipad y iphone, así como también en computadoras de escritorio / portátiles / otros navegadores:
var isOnIOS = navigator.userAgent.match(/iPad/i)|| navigator.userAgent.match(/iPhone/i);
var eventName = isOnIOS ? "pagehide" : "beforeunload";
window.addEventListener(eventName, function (event) {
window.event.cancelBubble = true; // Don''t know if this works on iOS but it might!
...
} );
¿Alguien sabe si el evento onbeforeunload
es compatible con el iPad y / o si hay una forma diferente de usarlo?
Intenté casi todo, y parece que el evento onbeforeunload
nunca se desencadena en el iPad (navegador Safari).
Específicamente, esto es lo que he intentado:
-
window.onbeforeunload = function(event) { event.returnValue = ''test''; }
-
window.onbeforeunload = function(event) { return ''test''; }
- (ambos de los anteriores juntos)
-
window.onbeforeunload = function(event) { alert(''test'')''; }
- (todas las funciones anteriores, pero dentro de
<body onbeforeunload="...">
Todos estos funcionan en FF y Safari en la PC, pero no en el iPad.
Además, he hecho lo siguiente justo después de cargar la página:
alert(''onbeforeunload'' in window);
alert(typeof window.onbeforeunload);
alert(window.onbeforeunload);
Respectivamente, los resultados son:
-
true
-
object
-
null
Entonces, el navegador tiene la propiedad, pero por alguna razón no se dispara.
La forma en que trato de navegar fuera de la página es haciendo clic en los botones hacia atrás y hacia adelante, haciendo una búsqueda en Google en la barra superior, cambiando la ubicación en la barra de direcciones y haciendo clic en un marcador.
¿Alguien tiene alguna idea sobre lo que está pasando? Agradecería mucho cualquier aporte.
Gracias
Hay un error conocido en WebKit con anterioridad a la descarga. Creo que está arreglado en la última versión beta de Chrome 5, pero es bastante posible que el navegador del iPad esté hecho de una versión de WebKit que no tiene la solución.
He encontrado que el evento onunload () se dispara. Su comportamiento es algo extraño; lo que tenga en su función de devolución de llamada adjunta al evento se ejecuta realmente después de que la nueva página se cargó en segundo plano (No puede decir que está cargado todavía, pero el registro del servidor mostrará que sí lo ha hecho).
Más curiosamente, si tiene una llamada a confirm () en su onunload (), y el usuario ha hecho clic en un enlace para ir a otra parte, usted está en el negocio. Sin embargo, si el usuario cierra la pestaña del navegador iPad Safari, el evento onunload () se disparará, pero su confirmación () tendrá una cancelación implícita como respuesta.
Si solo necesita saber si la página se ha dejado, puede usar document.unload
. Funciona bien en navegadores ios. Si ve en la documentación de Apple , encontrará que está obsoleta y recomienda utilizar document.pagehide
Solo Apple lo sabría con certeza, pero supongo que intencionalmente no habilitaron esa funcionalidad en Safari móvil porque los personajes con más sombra la usan con más frecuencia para que permanezca en su sitio o aparezca una gran cantidad de ventanas pornográficas / publicitarias.
beforeunload event no es compatible con Mobile Safari. Aquí puede ver la lista de todos los eventos compatibles: developer.apple.com/library/ios/documentation/AppleApplications/…
¡Y la carga previa no está en la lista!
https://code.google.com/p/chromium/issues/detail?id=97035
ver escuchar
ya no se permiten alertas durante los eventos de descarte de la página (beforeunload, download, pagehide).
Creo que las alertas, las solicitudes, las confirmaciones y otras acciones como estas tampoco se permiten.