自上个月以来,我们遇到了一个奇怪的问题,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都失败了,但我们没有看到可以实现此目的的环境之间的任何差异。
答案 0 :(得分:0)
这是Android 2. * Stock浏览器的famous bug,它使用Webkit 534
版本。
它已关闭为wrongforum
状态。所以,我认为解决这个问题没有问题。在Webkit Bug Tracker中我没有发现这样的错误。