2011-10-24 3 views
5

私は主に自己完結型で、必要な場合にのみサーバーと通信するモバイルWebアプリを開発中です。現在、使用されているライブラリは、次のとおりです。iOS 5 Safari JavaScriptの実行がタイムアウトを超過しました

  • のjQuery 1.6.4
  • のjQuery UI 1.8.3
  • 私たちがしたのiOS 5のリリースまではjQTouch

の修正/パッチを当てたバージョンtouchscroll.jsも使用していますが、Safariは固定とネイティブのスクロールをサポートしています。

のiOS 5のリリース以来、一見ランダムに、この例外が発生します

JavaScript: Error undefined JavaScript execution exceeded timeout 

それが提起されると、時間以上の非常に短い期間に実行なしJSコード(たとえば1ms)がSafariによって実行されます。ページを更新したり、新しいページに行ったり、新しいドメインに行ったりすることは効果がありません。でも、任意およびすべてのJSコード、

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

のような単純なものでは提起されている例外なく、ブラウザで実行されることはありません。これを回避するには、強制的にSafariを強制終了して再起動するしかありません。私は、window.setTimeout(...、1)のアプリケーションに遠隔からの「ヘビーデューティ」コードをラップしたり、UI更新以外のすべてに対してWeb Workersを利用することもできますが、アプリケーションとしての優れたソリューションはかなり大きく、大幅な書き換えが必要になります。

誰もこの問題が発生しましたか? 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ブロック。ただし、最大タイムアウト期間は数秒の範囲内にあるように見えます。私たちのアプリのコードのどれもブラウザ/ JSエンジンを(それは恐ろしいUXを提供するだろう)ロックしていないと思いますが、おそらくそれはおそらくサブミットの実行時間が300ミリ秒です。

+0

私は同じ問題を有し、かつ間隔またはWatchPositionを使用していない - intead私はjQueryの流砂のプラグインを使用しています...何をすべきかかなり確実ではありません。 – Ash

+0

ブラウザが壊れた状態になっていますか、実行がタイムアウトしてもスクリプトはまだ実行されていますか?これらのプラグインがCSSアニメーションをサポートしていない限り、QuicksandやjQuery UIなどのプラグインはモバイル開発には使用しません。ソフトウェアのアニメーションはかなり重い資源であり、モバイルブラウザで簡単にタイムアウトする可能性があります。あなたがそれを使用することを主張するなら、私はCSSアニメーション、トランスフォーム、およびトランジションを絶対配置とループの代わりに書き直すことを検討します。 CSSのアプローチはSafariでハードウェアアクセラレーションを使用しており、パフォーマンスは向上しています。 – illvm

答えて

0

watchPositionを使用していますか?もしそうなら、この答えを参照してください。JavaScript execution exceeded timeout

私はiOSの5がリリースされて以来、この問題で私の髪をリッピングしてきた - 私はあなたの痛みを感じます!

+0

私はそうではありませんが、私の同僚はこのアプリケーションの前にアクセスしている別のドメインの別のページにありました。私は、しかし、ハンドラの間隔をクリアせずにsetIntervalを使用していました。ハンドラが呼び出されたときに間隔をクリアするようにコードを変更し、間隔を再開してから問題が発生していません。私は2つの問題が関連しているのだろうかと思います。 – illvm

+0

興味深い - 私はいくつかのsetIntervalsを問題なく使用しています...私はそれがiOS5モバイルサファリバグの一種でなければならないと思います。あなたが解決策を見つけてうれしい! –

関連する問題