restaurar pestañas mantener los este con cargan asocian abiertas ios javascript-events mobile-safari

ios - mantener - pestañas safari iphone



El evento Pagehide en el cambio de tabulación inminente en Mobile Safari no se dispara cuando se ejecuta en iPad (3)

Intente verificar el enfoque y desenfoque en el documento.

¿Por qué necesita la API Visibilidad de página?

  1. Puede usar el evento de almacenamiento para decir otras páginas, que está activo.
  2. Puede usar temporizadores (setInterval) para verificar el tiempo del último disparo del temporizador. Y si es más grande de lo esperado, la página estaba oculta, porque la mayoría de los navegadores detienen el temporizador y la página está oculta.

Es sabido que Mobile Safari detiene la ejecución de JavaScript en una página web cuando

  1. cambia a una pestaña diferente del navegador
  2. cambiar a una aplicación de iOS diferente (por ejemplo, cuando recibe una llamada entrante, la aplicación del teléfono)

Puede suscribirse a los eventos "pagehide" y "pageshow" de la ventana para detectar la suspensión inminente y la reactivación de Javascript.

El problema es que esos eventos no se disparan cuando se cambia de pestaña (1.) en un iPad Mobile Safari. En un iPhone Mobile Safari, todo está bien , tal como se describe anteriormente.

Es trivial demostrar:

<!DOCTYPE html> <html> <head> <script> window.addEventListener("pagehide", function(evt){ var logger = document.getElementById(''log_id''); logger.innerText = logger.innerText + " pagehide fired!"; }, false); </script> </head> <body> <div id="log_id"></div> </body> </html>

Dispara en iPads (iOS5 y iOS6 Preview3) solo cuando se realiza el cambio de aplicación (2.) y no en el cambio de pestaña (1.). Todos los iPhones funcionan bien ...

¿Alguien ha sido capaz de detectar un inminente cambio de pestañas en el navegador del iPad?

La reactivación de Javascript cuando la pestaña vuelve a activarse puede detectarse mediante un ciclo de latido del corazón como se describe en esta discusión del mismo tema .


Estoy de acuerdo con Pinal: ¡usa enfoque / desenfoque! Pero sugiero no en el documento, sino en la ventana. Simplemente registre a un oyente y haga sus cosas allí.

Como dice http://caniuse.com/#feat=pagevisibility estados, la característica que desea utilizar no está bien implementada. (Edición: Acabo de probarlo en un mini caso de prueba, funciona en iOS 5/6, aunque caniuse.com afirma diferente)

Si intenta utilizar un temporizador, puede intentar solicitarAnimationFrame como una alternativa a setInterval.


Solucionado por Apple en iOS7 . (Acabo de probar en el simulador de iPad)