【问题标题】:setTimeout ignores delay in Android stock browser(Webkit 534.30)setTimeout 忽略 Android 股票浏览器中的延迟(Webkit 534.30)
【发布时间】: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


    【解决方案1】:

    这是 Android 2 的 famous bug。* Stock Browser,它使用 Webkit 534 构建。

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

    【讨论】:

    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多