2011-09-30 99 views
54

無限循環執行當您在瀏覽器的jsfiddle得到一個無限循環,你唯一的選擇(即我所知道的)是關閉的選項卡。當然,這意味着你在當前窗口中失去了所有的工作!有沒有簡單的方法來阻止無限執行的腳本?取消的jsfiddle

  1. 我有開發工具打開,因爲我在做一些調試。
  2. 我能夠暫停腳本,並通過循環步驟。
  3. 我找不到任何地方停止腳本。
  4. 我不能修改腳本或變量來停止無限循環(因爲腳本執行在一個單獨的域的iframe發生時,在使用JavaScript的IFRAME如此修改的數據是不允許的,在控制檯中產生一個異常) 。

這一切都開始因爲我決定在我的循環交換的方向從

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

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

但是,正如你可以在上面看到,我忘了把它從c++更改爲c--

任何想法??我仍然有標籤打開,我希望把它找回來,但不關閉選項卡:-)

+1

難道你不能在調試器中改變c的值嗎? – Joe

+0

Firefox檢測到無限循環並停止它們 – ryudice

+0

Chrome最終應該問您是否想要在腳本釋放後終止腳本。 – methodin

回答

7

隨着開發模式,進入資源,找到你的腳本複製並粘貼到文本文件或新窗口。如果您無法在資源中找到它,請搜索您使用的變量或一行代碼。

+1

如果他沒有打開開發標籤,他可能會被擰緊。當我嘗試時,該頁面爲我而死。 – methodin

+1

他說他已經打開了 – mowwwalker

+0

@Walkerneo:太棒了!杜,只需複製腳本並粘貼到其他地方...大聲笑明白了,謝謝!如果適用,還需要複製html/css代碼。如果您還沒有打開開發者控制檯,那麼如果有辦法到達那裏,仍然會很高興。如果發生這種情況,你可能會被搞砸。 – mellamokb

0

同樣的問題來到了這裏,我打開JavaScript控制檯在腳本暫停狀態。 (已暫停使用它的開發工具)

然後,我改變變量值,以使while循環將結束。

+0

爲了說清楚,在我已經忘記改變的while循環條件中使用的變量。我通過控制檯改變了這一點,循環結束。 –

+1

這是正確的,你可以改變變量值來結束循環。這是我首先想到的。然而,在我的特殊情況下(使用jsfiddle),執行腳本在主頁的子幀中運行在不同的域中,因此您無法修改幀中的變量值,這會導致問題:) – mellamokb

+0

除@mellamokb外更改變量值不起作用!它似乎設置了它,但是當你讀回它時,它又回到了舊值。哎呀! – Michael

1

運行進程資源管理器,並殺死目前正使用大量CPU的鍍鉻工藝......它會「崩潰」的頁面,讓你重新加載...

+0

殺死過程不是問題。我不想失去我目前的劇本。 – mellamokb

+0

確實謝謝。這工作甜.. – PedroMorgan

96

如何做纔不至於開發模式:

  • 打開一個新的標籤
  • 打開任務管理器,按住Shift鍵逃生
  • 殺任務
  • 使用後退按鈕用於殺死標籤(j SFiddle將無法運行該腳本)
  • BUG修復
  • 更新打破了無限循環的
+8

這是一個更好的答案 – SomeShinyObject

+3

nope丟失了我的代碼 – emilebaizel

+1

爲我工作,謝謝,我確實失去了我的最後編輯,所以也許這種方法並不適用於所有人 – dt192

3

一種方法是拋出一個未處理的異常,將停止當前調用堆棧的執行。 要做到這一點:

  1. 停頓debbuger
  2. 找到循環中一個有前途的語句,例如函數調用:foo.bar(args)
  3. 控制檯
  4. ,覆蓋函數拋出:foo.bar=function(){throw 42;}
  5. 取消暫停調試器

爲我工作。我還沒有嘗試過,但我相信通過重載getter或setter,你可以使用上面描述的技巧來進行賦值和讀取,而不僅僅是函數調用。另外,通過將變量設置爲undefined,如果在循環中使用此變量的字段,則可能會導致致命錯誤(並因此中斷循環)。例如delete foo.tab將中斷foo.tab[42]foo.tab.bar。出於某種原因,只需在控制檯中寫入foo=undefined,不會這樣做(也許它會在名爲foo的控制檯窗口中定義一個局部變量)。

+0

我似乎無法在無限循環中暫停時更改任何變量值... – Michael

0

如果其他人在閱讀其他答案後卡住了,這是我的工作(Chrome,Mac)。對我來說,JSFiddle標籤「卡住」了,但其餘的Chrome響應式。我在資源窗格上打開了JavaScript控制檯,但它也沒有響應。在這個狀態下重新加載頁面並沒有什麼幫助,因爲JSFiddle會在我得到任何東西之前給我腳本。

最後這個工作對我來說;也許它也會幫助你...

  • 雖然該頁面沒有響應,請轉至Chrome > Preferences > Privacy並禁用JavaScript。
  • 等待頁面消失(大約4或5分鐘);該標籤中出現了悲傷的臉部圖標。
  • 點擊後退按鈕。它應該看起來像JSFiddle正在加載,但它不會因爲足夠有趣的JSFiddle只需要JavaScript來呈現頁面。
  • View > Developer > View source
  • 我的劇本,只是輕微錯位,坐在那裏所有無辜就像在一個名爲div'panel_js'
  • 突出顯示,複製,再次呼吸,吸取教訓。
1

當循環標籤處於活動狀態時,我無法啓動Chrome的任務管理器。我不得不選擇另一個選項卡。然後我按Shift-Escape啓動任務管理器,殺死JSFiddle進程,重新選擇該選項卡,然後點擊後退按鈕以顯示頁面而不運行腳本。

JSFiddle使用iframe加載「結果」面板。截至2016年6月,該框架的URL是Fiddle URL加「/ show /」。我檢查了iframe的源代碼,發現它使用「/ light /」加載另一個URL。其中一個網址應包含您的源代碼。

如果你的瀏覽器支持view-source URI scheme,您可以通過以下方式訪問你的小提琴的源代碼:

  • 查看源代碼:jsfiddle.net/user_name/fiddle_hash/revision/light/
  • 查看源代碼: jsfiddle.net/user_name/fiddle_hash/revision/show/