1

時間制限のある外部 JavaScript を実行したいので、N 秒以上かかると停止します。

Firefox などの一部のブラウザでは、スクリプトの実行を継続できるようにするかどうかを確認するダイアログが表示されます。しかし、私はもう少し探しています:

  • ブラウザのデフォルトを使用するのではなく、独自の時間制限を設定したい (たとえば、Chrome は Firefox よりもはるかに長いと思います)。
  • ページごとではなく、スクリプトごとにこれを実行できるようにしたいと考えています。1 つのページには、この方法で制限したい複数のスクリプトが含まれている場合があります (したがって、<iframe>要素を使用するという私の考えです)。

<iframe>単純にアトリビュートをアタッチできるようなもの、例えば(自分で作ったもの)があれば便利だろうと思っていたのですが、js-time-limit="5000"そのようなものを見つけることができませんでした。

これは可能ですか?ブラウザで JavaScript の実行に設定可能な時間制限を設けるには?

4

2 に答える 2

1

iframe が計算作業を行っており、DOM にアクセスする必要がない場合は、Web ワーカーを使用します: https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers

難しい部分を抽象化できるライブラリもあります! http://adambom.github.io/parallel.js

重要な部分:

専用 Web ワーカーは、Web コンテンツがバックグラウンド スレッドでスクリプトを実行するための簡単な手段を提供します。

実行中のワーカーをすぐに終了する必要がある場合は、ワーカーの terminate() メソッドを呼び出して実行できます。myWorker.terminate();

ブラウザの互換性

Chrome  Firefox (Gecko)  Internet Explorer  Opera  Safari (WebKit)
   3        3.5 (1.9.1)          10         10.60        4
于 2013-06-21T15:24:11.113 に答える
0

後世のために: 私の最初の目標は、Web サイトのユーザーが JS コードを送信し、時間制限付きでバックグラウンドで実行できるようにすることでした。これにより、たとえば、無限ループが CPU に大損害を与えないようにすることができました。

Joe が提案したアプローチを使用して、Lemming.jsというライブラリを作成しました。次のように使用します。

var lemming = new Lemming('code to eval');

lemming.onTimeout(function() {
  alert('Timed out!');
});

lemming.onResult(function(result) {
  alert('Result: ' + result);
});

lemming.run({ timeout: 5000 });

詳細については、GitHub リポジトリを確認してください。

于 2013-12-06T00:12:21.513 に答える