ill*_*lvm 5 javascript safari mobile-safari timeoutexception ios5
我正在开发一个主要是自包含的移动网络应用程序,仅在必要时与服务器通信.目前,使用的库是:
直到iOS 5发布之前,我们还使用了touchscroll.js,但不再需要它,因为Safari现在支持位置:固定和本机滚动.
自iOS 5发布以来,似乎随机出现了这个异常:
JavaScript: Error undefined JavaScript execution exceeded timeout
Run Code Online (Sandbox Code Playgroud)
一旦它被引发,Safari将执行运行时间超过很短时间(比如1ms)的JS代码.刷新页面,转到新页面或转到新域名无效.任何和所有JS代码,甚至是简单的东西
for(var i = 0; i < 30; i++) ;
Run Code Online (Sandbox Code Playgroud)
在没有引发异常的情况下,浏览器不会执行.解决这个问题的唯一方法是强行杀死Safari并重启它.我想也可以在window.setTimeout(...,1)中将任何远程"重型"代码包装在应用程序中,或者利用Web Workers获取除UI更新之外的所有内容,但这看起来不是很好很好的解决方案,因为应用程序相当大,需要大量重写.
有没有人遇到过这个问题?你会如何调试这样的事情,因为似乎没有任何一段代码似乎将Safari置于这种破碎的状态,它似乎随机发生?
我试图通过执行以下操作来弄清楚移动Safari中JS引擎的超时:
var start, end;
start = new Date();
try {
while(true);
} catch (ex) {
alert('test');
}
end = new Date();
console.log(Number(end) - Number(start) + 'ms');
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个超时异常似乎不是JS异常,所以它不能在try/catch块中捕获; 但是,最大超时时间似乎在几秒的范围内.我们的应用程序中的代码都没有锁定浏览器/ JS引擎那么久(因为它会提供一个糟糕的用户体验),大多数(如果不是全部)可能有300毫秒的执行时间(包括任何"重负荷").
| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |