web-dev-qa-db-ja.com

jsfiddleで無限ループの実行をキャンセルする

Chromeのjsfiddleで無限ループが発生した場合、唯一の選択肢(知っていること)はタブを閉じることです。もちろん、これは現在のウィンドウですべての作業を失うことを意味します!無限に実行するスクリプトを停止する簡単な方法はありますか?

  1. デバッグを行っていたため、開発者ツールを開いています。
  2. スクリプトを一時停止し、ループをステップスルーできます。
  3. スクリプトを停止する場所が見つかりません。
  4. スクリプトまたは変数を変更して無限ループを停止することはできません(スクリプトの実行は別のドメインのiframeで発生するため、iframeのデータをJavaScriptで変更することは許可されず、コンソールで例外が生成されます)。

すべてが始まったのは、ループの方向を

for (var c = 0; c <= 11; c++)

for (var c = 12; c > 0; c++)

しかし、上記のように、c++からc--

何か案は??私はまだタブを開いていますが、タブを閉じずに元に戻したいと思っています:-)

55
mellamokb

開発者モードで、リソースに移動してスクリプトを見つけ、それをコピーしてテキストドキュメントまたは新しいウィンドウに貼り付けます。リソースで見つからない場合は、使用した変数またはコード行を検索してください。

7
mowwwalker

開発者モードなしでそれを行う方法:

  • 新しいタブを開く
  • Shift-Escapeでタスクマネージャーを開く
  • タスクを殺す
  • 削除されたタブに戻るボタンを使用(JSFiddleはスクリプトを実行しません)
  • バグ修正
  • 更新
97
Adam Ritter

無限ループを壊す方法の1つは、現在の呼び出しスタックの実行を停止する未処理の例外をスローすることです。そうするには:

  1. デバッガーを一時停止する
  2. ループ内で有望なステートメント、たとえば関数呼び出しを見つける:foo.bar(args)
  3. コンソールで、スローする関数を上書きします:foo.bar=function(){throw 42;}
  4. デバッガの一時停止を解除します

私のために働いた。試したことはありませんが、ゲッターまたはセッターをオーバーロードすることで、関数呼び出しだけでなく、割り当てと読み取りにも上記のトリックを使用できると思います。また、変数を未定義に設定すると、この変数のフィールドがループで使用されている場合、致命的なエラーが発生する可能性があります(したがって、ループを中断します)。例えば ​​delete foo.tabfoo.tab[42]またはfoo.tab.bar。何らかの理由で、単にfoo=undefinedは、コンソールでは行いません(おそらく、fooという名前のコンソールウィンドウに対してローカルな変数を定義します)。

3
qbolec

ループタブがアクティブなときにChromeのタスクマネージャーを起動できませんでした。別のタブを選択する必要がありました。次に、Shiftキーを押しながらエスケープキーを押して、タスクマネージャーを起動し、JSFiddleプロセスを強制終了し、タブを再度選択して、スクリプトを実行せずに戻るボタンを押します。

JSFiddleは、iframeを使用して「結果」パネルをロードします。 2016年6月の時点で、フレームのURLはFiddle URLと "/ show /"です。iframeのソースコードを調べたところ、 "/ lightでさらに別のURLを読み込むことがわかりました/ "。これらのURLの1つにソースコードを含める必要があります。

ブラウザが view-source URIスキーム をサポートしている場合、次のようにフィドルのソースコードにアクセスできます。

  • view-source:jsfiddle.net/user_name/fiddle_hash/revision/light/
  • view-source:jsfiddle.net/user_name/fiddle_hash/revision/show/
1
Lachmanski

Process Explorerを実行し、大量のCPUを使用しているchromeプロセスを強制終了します...ページを「クラッシュ」させ、リロードさせます...

1
David

ファイルがループ状態になっていて、JSFiddleのダッシュボードもフリーズしていました。

  • クリアできる唯一の方法は、別のFiddleタブで新しいChromeページを開いている間に[設定]タブでJavaScriptを無効にすることでした。
  • 次に、すべてのフィドルに移動します。
  • Fiddleを削除すると、404エラーが発生します。
  • JavaScriptをオンにして、ダッシュボードをリロードします。
  • その後、フィドルの作成と編集を続けることができました。
0
Brad Lensing

ここでも同じ問題が発生しました。スクリプトの一時停止状態でjavascriptコンソールを開きました。 (開発者ツールを使用して一時停止)

次に、whileループが終了するように変数値を変更しました。

他の回答を読んだ後に他の人が立ち往生している場合は、ここで私のために働いたものです(Chrome、Mac)。私にとって、JSFiddleタブは「スタック」していましたが、残りのChromeレスポンシブです。リソースペインでJavaScriptコンソールを開いていましたが、レスポンシブでもありました。この状態でページをリロードしませんでした ' JSFiddleがスクリプトを提供してくれるので、何も手に入らないからです。

結局、これは私のために働いた。多分それもあなたを助けるでしょう...

  • ページが応答しない間、Chrome > Preferences > PrivacyおよびJavaScriptを無効にします。
  • ページが終了するのを待ちます(約4〜5分)。そのタブに悲しい顔のアイコンが表示されます。
  • 戻るボタンを押します。 JSFiddleがロードされているように見えますが、面白く十分なJSFiddleはページをレンダリングするためだけにJavaScriptを必要としているため、ロードされません。
  • View > Developer > View source
  • 私のスクリプトは、ほんの少ししかめちゃめちゃになっていましたが、divという'panel_js'
  • ハイライト、コピー、もう一度呼吸、レッスンを学びます。
0
kwinkunks