iOS 6的js事件function不调用,如果有setTimeout在其中
我注意到这个奇怪的行为与最新的iOS(iOS 6)。 如果为任何具有setTimeout的触摸事件调用函数,那么setTimeout内的部分永远不会被触发。
只有当有“系统animation”,如滚动和放大/缩小,才会发生这种情况。
例如:
http://jsfiddle.net/p4SdL/2/
(我用jquery只是为了testing,但同样的情况发生在纯js上)
在任何iOS 6设备上使用Safari浏览器打开该页面,然后放大或缩小。 警报永远不会被调用。
如果在任何iOS 5设备上testing,这将工作得很好! 在这些animation中,似乎setTimeout或setInterval被操作系统重置。 这是预期的行为还是错误?
谢谢
注意 :它看起来像UIWebView不支持requestAnimationFrames。 感谢Guillaume Gendre指出!
我们遇到了一个类似的问题,我们正在开发一个Web应用程序。
对我们来说,触动是造成问题的原因。 我们实施了一个解决方法(在这里find: https : //gist.github.com/3755461 )似乎工作得很好,直到另一个问题迫使我们放弃它。 (我尝试将解决方法添加到你的小提琴中,并且能够让计时器触发一两次,但是它需要一个奇怪的手势+滚动事件,几乎不可能持续重现。)
无论如何,iOS 6开发者的新function之一是requestAnimationFrames。 我的解决方法基本上是定时器的包装,允许开发人员传递布尔值,这将调用本机函数或解决方法函数。
例如:
setTimeout(function(){alert("HI")}, 1000); // using native setTimeout(function(){alert("HI")}, 1000, true); // using workaround
以下是使用该解决方法的其他方法:
setInterval(function(){console.log("Interval")}, 1000, true); var timer = setTimeout(function(){ /* ... */ }, 60000, true); clearTimeout(timer); var interval = setInterval(someFunc, 10000, true); if(someCondition) clearInterval(interval);
这里有两个解决办法的例子。 尝试在黑色方块上捏/缩放:
http://jsfiddle.net/xKh5m/embedded/result (使用本机setTimeout
函数) http://jsfiddle.net/ujxE3/embedded/result
我们已经在生产环境中使用了这个解决scheme了几个月,并没有遇到任何重大问题。
以下是解决方法的一个公共要点: https : //gist.github.com/4180482
以下是有关requestAnimationFrames的更多信息:
MDN文档
保罗爱尔兰请求animation帧
祝你好运!
- 从UIScript中的pageScroll发生的Jscript中获取标签和值
- iPad的HTML网页问题
- jqmobi。 在input字段集中的内容上移时,在ios(ipod)上
- 本地iOS电子邮件客户端不能播放HTML5video(2015)
- Http Live Streaming for iPhone以及为什么我们使用.m3u8文件
- iPad 2 Safari显示像素化的HTML文本和图像
- 在不使用jQuery的情况下获取移动设备(特别是iPhone)上的窗口高度
- 我如何在HTML5的应用程序caching中存储50MB的video?
- iOS UIWebView中未定义requestAnimationFrame?