iOS 5 Safari JavaScript执行超过超时

iOS 5 Safari JavaScript执行超过超时,javascript,safari,mobile-safari,ios5,timeoutexception,Javascript,Safari,Mobile Safari,Ios5,Timeoutexception,我正在开发一个移动web应用程序,它基本上是独立的,只有在必要时才与服务器通信。目前使用的库有: jQuery 1.6.4 jQueryUI1.8.3 jQTouch的修改/修补版本 在iOS 5发布之前,我们也一直在使用touchcroll.js,但由于Safari现在支持position:fixed和native scrolling,因此不再需要它 由于iOS 5的发布似乎是随机的,因此出现了以下例外情况: JavaScript: Error undefined JavaScript e

我正在开发一个移动web应用程序,它基本上是独立的,只有在必要时才与服务器通信。目前使用的库有:

  • jQuery 1.6.4
  • jQueryUI1.8.3
  • jQTouch的修改/修补版本
在iOS 5发布之前,我们也一直在使用touchcroll.js,但由于Safari现在支持position:fixed和native scrolling,因此不再需要它

由于iOS 5的发布似乎是随机的,因此出现了以下例外情况:

JavaScript: Error undefined JavaScript execution exceeded timeout
一旦启动,Safari将不会执行运行时间超过很短时间(比如1ms)的JS代码。刷新页面、转到新页面或转到新域无效。任何和所有的JS代码,甚至像

for(var i = 0; i < 30; i++) ;

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

您使用的是watchPosition吗?如果是,请参阅此答案:


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

我不是,但我的同事在另一个域的另一个页面上,该域在此应用程序之前被访问。但是,我使用setInterval时没有清除处理程序中的间隔。我更改了代码以在调用处理程序时清除间隔,并重新启动间隔,此后就没有出现问题。我想知道这两个问题是否相关。有趣的是,我使用了几个没有问题的设置间隔。。。我认为这一定是某种iOS5 mobile safari错误,因为我测试的其他浏览器没有抛出这些错误。很高兴你找到了解决办法!我有同样的问题,没有使用Interval或WatchPosition-intead,我使用的是Jquery Quicksand插件。。。不太确定该怎么办。您是否使浏览器处于损坏状态,或者执行只是超时,但脚本仍在运行?除非那些插件支持CSS动画,否则我不会在移动开发中使用Quicksand或jQuery UI之类的插件。软件动画资源非常丰富,在移动浏览器上很容易超时。如果你坚持使用它,我会考虑改写它使用CSS动画,转换和转换,而不是绝对定位和循环。CSS方法在Safari中是硬件加速的,具有更好的性能。
var start, end;
start = new Date();

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

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