setTimeout忽略Android股票浏览器中的延迟(Webkit 534.30)

时间:2014-12-17 08:35:52

标签: javascript android jquery-mobile webkit settimeout

自上个月以来,我们遇到了一个奇怪的问题,setTimeout在使用Webkit 534.30的某些设备中执行我们的应用程序,来自android webview和stock浏览器。我们的应用程序是一个jQueryMobile Web应用程序。

setTimeout调用忽略了延迟,并立即执行回调。这些有问题的setTimeout调用已经正常工作了近两年,并且在每个SO& Navigator除了最后提到的Webkit。

var timerId;

function resetDisconnect(){
   if(timerId != null){
       window.clearTimeout(timerId);
   }

   timerId = window.setTimeout(function(){
       //Delayed code
       disconnect();
   }, 600000);
}

$(document).ajaxComplete(function() {
   resetDisconnect();
});

正如您所看到的,我们正在使用匿名函数,因此它未在setTimeout声明中进行评估,并且延迟值是硬编码的。

这让我们发疯了,问题是我们使用这个计时器在用户保持非活动状态(无服务器呼叫)10分钟时断开用户连接,但在某些使用Webkit 534.30的设备中,回调在&#后立即执行34; ajaxComplete"事件被解雇了。

请注意,我们尚无法在我们的开发环境中重现此行为。

什么可以使setTimeout忽略此Webkit版本中的延迟?

我们注意到,在上述代码失败的设备中,应用的所有setTimeouts都失败了,但我们没有看到可以实现此目的的环境之间的任何差异。

1 个答案:

答案 0 :(得分:0)

这是Android 2. * Stock浏览器的famous bug,它使用Webkit 534版本。

它已关闭为wrongforum状态。所以,我认为解决这个问题没有问题。在Webkit Bug Tracker中我没有发现这样的错误。