setInterval在iPhone上不起作用

时间:2011-08-31 14:25:05

标签: javascript iphone android ajax setinterval

据报道,当软键盘打开时,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。

2 个答案:

答案 0 :(得分:0)

我知道这不是一个理想的解决方案,但你可以使用HTML5工作人员而不是setInterval(虽然我不知道他们是否也在后台暂停 - 我假设他们不是,那将是如果他们是非常奇怪的?)

它确实为不符合HTML5标准的PC浏览器增加了许多向后兼容性问题:(

http://www.sitepoint.com/javascript-threading-html5-web-workers/

答案 1 :(得分:0)

一种可能的解决方法是使用比所需的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);