Comment détecter dans l'application Web iOS lors du retour à Safari en arrière-plan?
Comment puis-je créer une page web qui est en mesure de surveiller lorsque la page obtient le focus, surtout quand Safari est en arrière-plan et que l'utilisateur passe Safari de retour au premier plan.
Le code ci-dessous ne déclenche pas l'événement lors de la commutation de Safari sur un iPhone
<html>
<head>
<script type="text/javascript">
window.onfocus = function() { alert("onfocus"); };
</script>
</head>
<body>
Main text
</body>
</html>
Selon http://www.quirksmode.org/dom/events/index.html : Safari de l'iPhone ne déclenche pas l'événement lorsque la fenêtre obtient le focus.
Donc ma question est toujours: comment détecter à l'aide de javascript sur une page web dans Safari pour iPhone à la fenêtre reçoit le focus?
source d'informationauteur Axel Derks
Vous devez vous connecter pour publier un commentaire.
Je crois chronomètres (setInterval()) sont suspendus lors de l'app entre l'arrière-plan. Vous pourriez faire quelque chose comme:
Vous devrez peut-être ajuster ces intervalles de temps à la suite de vos besoins.
Mais, le plus probable, si elle a été assez long à besoin d'un rafraîchissement (quelques jours) safari sera probablement recharger la page, car il est à court de mémoire.
La La Page de la Visibilité de l'API serait probablement offrir une solution à ce Problème. Je suppose que cette API n'a pas été mis en œuvre dans le navigateur Safari Mobile encore, au moins je n'ai pas trouvé de documentation pour un iOS mise en œuvre. Toutefois, une mise en Œuvre a été engagé à la Webkit Tronc, alors il ya une chance qu'il sera pris en charge par les futures Versions de Safari Mobile.
En fonction de ce que vous avez besoin de soutien, vous avez besoin d'une variété de différentes techniques pour détecter quand une page est visible. Les Variations se produisent en raison de navigateur, le fournisseur, la version du navigateur, le système d'exploitation s'exécutant dans le WebView/UIWebView/WKWebView, etc.
Vous pouvez afficher les événements qui se produisent en utilisant cette page. J'ai trouvé que pour détecter le moment où la page "réveille" sur toutes les combinaisons que je nécessaire à l'enregistrement de tous les événements suivants:
J'ai l'habitude d'utiliser webkitRequestAnimationFrame ainsi, mais je l'ai enlevé car il pourrait causer des jank (autant que je sache, le moteur de rendu fait un appel de blocage pour le thread principal).
Choses à essayer:
Vous pouvez voir les événements qui sont en train de se produire:
iOS: méfiez-vous si vous utilisez une minuterie pour détecter si un iOS UIWebView est allé se coucher, vous avez besoin de mesurer la différence en utilisant
new Date.getNow()
et pasperformance.now()
. C'est parce queperformance.now()
arrête le comptage du temps lorsque la page est mis à dormir aussi iOS a été lent à mettre en œuvre la performance.maintenant()... (à part: vous pouvez être capable de mesurer la quantité de fois que la page a été endormi par la détection de l'discrepency de différences pournew Date.getNow()
etperformance.now()
. Recherchez l' != sur le page de test).Si vous utilisez UIWebView alors il existe deux techniques de travail (Vous devez utiliser UIWebViewif-vous favorable à l'iOS7 Application). WKWebView a la visibilitychange de l'événement ainsi que des solutions de contournement ne sont pas nécessaires.
==Technique 1.
Lorsque le applicationWillEnterForeground événement se produit dans l'application, appel UIWebView stringByEvaluatingJavaScriptFromstring pour appeler votre JavaScript pageAwakened().
Avantages: propre, précis.
Inconvénient: nécessite le code Objective-C. Fonction appelée doit être accessible à partir de portée mondiale.
==Technique 2.
Utilisation webkitRequestAnimationFrame et de détecter un décalage dans le temps.
Avantages: JavaScript. Œuvres pour mobile Safari sur iOS7.
Inconvénient: laid risque de jank et à l'aide de webkitRequestAnimationFrame est une grave hack.
Puisque le problème est avec le navigateur safari mobile et il prend en charge popstate cas, vous pouvez utiliser cet événement pour détecter lorsque l'utilisateur est de retour
Le focus et blur événements sur la fenêtre sont bons pour détecter si le navigateur est d'aller ou revenir de l'arrière-plan. Cela a fonctionné pour moi sur iOS8 Safari:
Utiliser le
pageshow
etpagehide
événements.https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html