La fonction d'événements iOS 6 js n'est pas appelée si setTimeout s'y trouve
J'ai remarqué un comportement étrange avec le dernier iOS (iOS 6). Si l'appel d'une fonction pour n'importe quel événement de touche qui a un setTimeout à l'intérieur, la partie à l'intérieur de la setTimeout n'est jamais déclenché.
Cela se produit uniquement quand il y a un "système d'animation", telles que le défilement et le zoom-in/out.
Par exemple:
(J'ai utilisé jquery juste pour le test, mais le même phénomène se produit avec de la pure js)
Ouvrir cette page avec safari sur n'importe quel appareil iOS 6 et un zoom avant ou arrière. L'alerte ne sera jamais appelé.
Si testé sur n'importe quel iOS 5 appareil à cela suffira! Il semble qu'au cours de ces animations la setTimeout ou setInterval sont remis à zéro par le système d'exploitation. Est-ce le but de comportement ou un bug?
Grâce
source d'informationauteur kiwi1342
Vous devez vous connecter pour publier un commentaire.
Note: Il ressemble à UIWebView ne prend pas en charge requestAnimationFrames. Grâce à Guillaume Gendre pour le tuyau!
Nous avons rencontré un problème similaire avec une application web, nous travaillons sur l'.
Pour nous, c'était touchmove qui a causé les problèmes. Nous avons mis en place une solution de contournement (trouvé ici: https://gist.github.com/3755461) qui semblait fonctionner assez bien jusqu'à un autre problème nous a forcé à abandonner. (J'ai essayé d'ajouter la solution de contournement pour vos violons et a été en mesure d'obtenir la minuterie à feu une fois ou deux fois, mais elle avait besoin d'un étrange geste+touche de défilement de l'événement qui a été sacrément près impossible à reproduire systématiquement.)
De toute façon, l'une des nouvelles fonctionnalités dans iOS 6 pour les développeurs sont requestAnimationFrames. Ma solution est en fait un wrapper pour le timer, permettant aux développeurs de passer un booléen, qui va appeler la fonction native ou la solution de contournement de la fonction.
Par exemple:
Voici d'autres façons d'utiliser la solution de contournement:
Voici deux violons avec la solution de contournement des exemples. Essayez de pincement/zoom sur les carrés noirs:
http://jsfiddle.net/xKh5m/embedded/result (Utilise natif
setTimeout
fonction)http://jsfiddle.net/ujxE3/embedded/result
Nous avons été à l'aide de cette solution de contournement pour quelques mois dans un environnement de production, et n'ont pas rencontré de problèmes majeurs.
Voici un public essentiel de la solution de contournement: https://gist.github.com/4180482
Voici plus d'informations sur requestAnimationFrames:
MDN documentation
Paul Irlandais sur requestAnimationFrame
Bonne chance!