setInterval 在 iPhone 上不起作用
Posted
技术标签:
【中文标题】setInterval 在 iPhone 上不起作用【英文标题】:setInterval doesn't work on iPhone 【发布时间】:2011-11-07 16:12:40 【问题描述】:据报道,当软键盘打开时,setInterval 会暂停。 (android 上的相同错误)
http://code.google.com/p/android/issues/detail?id=13540 http://www.barneyb.com/barneyblog/2011/02/20/settimeout-bug-in-android-2-2/
有什么解决办法吗?我正在使用 Ajax Load 使用 setInterval 每 x 秒刷新一次内容的网站。它适用于所有 PC 浏览器,但不适用于 iPhone/Android。
【问题讨论】:
您从哪里获得内容?您是否有自己的服务器端脚本来返回要更新的内容? 【参考方案1】:我知道这不是一个理想的解决方案,但您可以使用 html5 工作者而不是 setInterval(虽然我不知道它们是否也在后台暂停 - 我假设它们不是,那将是如果是的话就很奇怪)?
它确实为不兼容 HTML5 的 PC 浏览器增加了许多向后兼容性问题:(
http://www.sitepoint.com/javascript-threading-html5-web-workers/
【讨论】:
【参考方案2】:一种可能的解决方法是使用比您期望的 X 秒刷新时间更短的间隔,但它只会在适当的时间过去后才真正触发回调。当然更麻烦,但也不是那么复杂。
编辑:一些示例代码
var setiPhoneInterval = function(callback, delay)
var checkInterval = delay / 10; // break down original delay into 10 sub-intervals for checking
var lastFired = new Date();
var fire = function()
var now = new Date();
if(now.getTime() - lastFired.getTime() > delay )
lastFired = new Date();
callback();
;
var interval = setInterval(fire, checkInterval);
return interval;
;
var myCallback = function()
console.log('fired!');
;
var foo = setiPhoneInterval(myCallback, 10000);
// and, you can still clearInterval if you'd like
// clearInterval(foo);
【讨论】:
以上是关于setInterval 在 iPhone 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥外部链接在构建后在 phonegap 应用程序上不起作用