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 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

关键帧动画在 iPhone 上不起作用

Bootstrap 模态在 iPhone 上不起作用

为啥外部链接在构建后在 phonegap 应用程序上不起作用

onclick 事件在 iPhone 上不起作用

UNNotificationServiceExtension 在 iPhone 5 (iOS 10) 上不起作用

JavaScript - touchstart 在 iPhone 上不起作用