【发布时间】:2015-02-15 17:56:12
【问题描述】:
自上个月以来,我们遇到了一个奇怪的问题,setTimeout 在一些使用 Webkit 534.30 的设备上从 android webview 和 stock 浏览器执行我们的应用程序时。我们的应用是一个 jQueryMobile 网络应用。
setTimeout 调用忽略延迟并立即执行回调。这些有问题的 setTimeout 调用已经正常工作了将近两年,并且在除最后提到的 Webkit 之外的所有 SO 和 Navigator 中都可以正常工作。
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 的设备中,回调在“ajaxComplete”之后立即执行" 事件被触发。
请注意,我们无法在我们的开发环境中重现此行为。
什么可以让setTimeout忽略这个Webkit版本中的延迟?
我们注意到,在上述代码失败的设备中,应用的所有 setTimeouts 都失败了,但我们没有看到可以导致这种情况发生的环境之间的任何差异。
【问题讨论】:
标签: javascript android jquery-mobile webkit settimeout