2012-08-03 8 views
13

E 'ben noto che Safari Mobile mette in pausa l'esecuzione JavaScript su una pagina web quandoevento Pagehide sulla commutazione scheda imminente Safari Mobile non si attiva durante l'esecuzione su iPad

  1. si passa a diversa scheda del browser
  2. interruttore per un diverso iOS (ad esempio quando si riceve una chiamata il telefono app)

è possibile iscriversi alla "pagehide" della finestra e "pageshow" eve nts per rilevare la sospensione imminente e la riattivazione di Javascript.

Il problema è che quegli eventi non vengono attivati ​​quando tab-switching (1) su un iPad Safari Mobile. Su un iPhone Mobile Safari tutto è multa, proprio come descritto sopra.

E 'banale per dimostrare:

<!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> 

Spara su iPad (iOS5 e iOS6 Preview3) solo quando facendo app-switching (2.) e non sulla scheda-switching (1.). Tutti gli iPhone funzionano bene ..

Qualcuno è stato in grado di rilevare una imminente commutazione delle schede sul browser iPad?

Il riattivazione di JavaScript quando la linguetta diventa nuovamente attivo possono essere rilevate da un cuore Beat loop come descritto in this discussion of the same topic.

+0

Questo evento si attiva anche quando il dispositivo è bloccato. Puoi usare pageshow che si attiva quando il dispositivo è sbloccato e la pagina viene mostrata di nuovo. –

+0

Hai provato [window.onblur] (https://developer.mozilla.org/en-US/docs/Web/API/window.onblur)? Potrebbe funzionare. – Uooo

risposta

1

Prova a verificare la messa a fuoco e la sfocatura sul documento.

Perché è necessaria l'API di visibilità delle pagine?

  1. È possibile utilizzare l'evento di archiviazione per dire altre pagine, chi è attivo.
  2. È possibile utilizzare i timer (setInterval) per controllare l'ora dall'ultimo fuoco del timer. E se è più grande del previsto - la pagina era nascosta, perché la maggior parte dei browser interrompe il timer, quindi la pagina è nascosta.
0

Sono d'accordo con Pinal: Usa messa a fuoco/sfocatura! Ma io suggerisco non sul documento, ma piuttosto sulla finestra. Basta registrare un ascoltatore per loro e fare le tue cose lì dentro.

Come stato http://caniuse.com/#feat=pagevisibility, la funzione che si desidera utilizzare non è ben implementata. (Modifica: basta testarlo in una mini-test-case - funziona su iOS 5/6 - anche se caniuse.com asserisce diversi)

Se provi a usare un timer, puoi provare requestAnimationFrame come alternativa a setInterval .

+0

Sto scrivendo un gioco html5, sto mettendo in pausa la fisica del gioco quando un giocatore si allontana dal gioco, gli eventi di sfocatura e messa a fuoco non mi sparano nel safari su iOS 6.1.3 ad es. '$ (window) .on ('blur', _ pauseGame)' quando cambio scheda e ritorna a homescreen ios, gli eventi funzionano perfettamente sul desktop. – Rob

1

Risolto da Apple in iOS7. (Appena provato nel simulatore iPad)

Problemi correlati