gpt4 book ai didi

javascript - iOS 5 Safari JavaScript 执行超时

转载 作者:搜寻专家 更新时间:2023-11-01 04:42:52 24 4
gpt4 key购买 nike

我正在开发一个移动网络应用程序,该应用程序主要是独立的,仅在必要时才与服务器通信。目前,正在使用的库是:

  • jQuery 1.6.4
  • jQuery 用户界面 1.8.3
  • jQTouch 的修改/补丁版本

直到 iOS 5 发布之前,我们也一直在使用 touchscroll.js,但由于 Safari 现在支持位置:固定和 native 滚动,因此不再需要它。

自从 iOS 5 发布以来,似乎是随机的,抛出了这个异常:

JavaScript: Error undefined JavaScript execution exceeded timeout

一旦引发,Safari 将不会执行运行时间超过非常的短时间(例如 1 毫秒)的 JS 代码。刷新页面、转到新页面或转到新域都没有效果。任何和所有 JS 代码,甚至像

这样简单的代码
for(var i = 0; i < 30; i++) ;

将不会在没有引发异常的情况下被浏览器执行。解决此问题的唯一方法是强制终止 Safari 并重新启动它。我想也可以将应用程序中的任何远程“重型”代码包装在 window.setTimeout(..., 1) 中,或者利用 Web Worker 进行除 UI 更新之外的所有操作,但这看起来不太像很好的解决方案,因为应用程序相当大,需要大量重写。

有没有人遇到过这个问题?你会如何调试这样的事情,因为它不是任何一段代码似乎会使 Safari 进入这种损坏的状态,而且它似乎是随机发生的?

我试图通过执行以下操作来弄清楚 JS 引擎在移动版 Safari 中的超时时间:

var start, end;
start = new Date();

try {
while(true);
} catch (ex) {
alert('test');
}

end = new Date();
console.log(Number(end) - Number(start) + 'ms');

不幸的是,这个超时异常似乎不是 JS 异常,所以它不能在 try/catch block 中被捕获;但是,最大超时时间似乎在几秒钟的范围内。我们应用程序中的任何代码都不会将浏览器/JS 引擎锁定那么长时间(因为它会提供糟糕的用户体验),而且大多数(如果不是全部)执行时间可能低于 300 毫秒(包括任何“重型”)。

最佳答案

你在使用 watchPosition 吗?如果是这样,请查看此答案:JavaScript execution exceeded timeout

自从 iOS 5 发布以来,我就一直在为这个问题大发雷霆——我能感受到你的痛苦!

关于javascript - iOS 5 Safari JavaScript 执行超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7876994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com