2012-03-11 89 views
8

在控制檯,Chrome和Firefox中,按Ctrl + C的等效功能是什麼?在實現各種算法時,我經常在Javascript中寫一些不退出的buggy(while)循環,導致瀏覽器凍結。重新加載不起作用,點擊關閉該選項卡的小X不會執行任何操作,並且在一段時間內(字面上)我已經失去了內存,系統正在交換,並且我要離開休息一下。你如何在瀏覽器中斷JS?

+0

ctrl + alt + del – user544262772 2012-03-11 22:22:39

+3

我不得不承認,這對於瀏覽器開發者來說更​​像是「動力」,以解決這種情況。 – skrat 2012-03-13 16:24:55

+0

坦率地說,現有的JS執行者是愚蠢的,他們不能做這麼簡單的事情。 – Pacerier 2017-06-18 22:25:56

回答

5

腳本標籤有一個Ctrl + C爲JavaScript沒有這樣的事情。執行JavaScript的瀏覽器通常會保護自己。如果任何JavaScript掛起,他們會拋出一個對話框詢問用戶是否想要停止JavaScript。

超時時間通常可以在瀏覽器的設置中找到。您可以在這裏找到如何爲FireFox執行此操作:http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox

+1

當我的系統已經交換時,他們的確會拋出該對話。 – skrat 2012-03-13 16:26:21

5

在Chrome中,您可以點擊Shift+ESC(或右鍵單擊標題欄並打開Chrome任務管理器),並終止與掛起選項卡關聯的進程。這將在關閉選項卡時不起作用。

需要注意的是,Chrome有時會將多個標籤簡化爲一個進程,這會終止與進程相關的所有標籤。


另一種方法,你可以去避免while環吊的瀏覽器是寫這樣的代碼(你可以把它拿出來測試後):

var maxIterations = 100000; 
while (foo) { 
    if (!maxIterations--) throw new Error('Max iterations hit, aborting.'); 
    // do stuff 
} 

右擊Chrome的任務管理器,並選擇上下文菜單底部的項目,以顯示一個奇怪的復活節彩蛋。

+0

'while(foo && --maxIterations){...}' – vol7ron 2012-03-11 22:32:19

+0

@ vol7ron我把maxIterations的東西放在與代碼的其餘部分分開的行中,所以如果需要它可以很容易地剝離出來 – 2012-03-11 22:34:31

+0

我明白你是什麼這樣做。對我而言,刪除並保持所有內容緊密結合會更輕鬆。有一個單獨的if塊將其分開了一點 - 你必須實際讀入while塊,而不僅僅是查看不能縮放的前提條件和條件 – vol7ron 2012-03-12 04:57:26

1

從一點點的見解我到您的工作,我將如何着手的方法是:

  • 只執行像按鈕單擊事件的腳本。這將運行腳本防止onload
  • Chrome可讓您在您的js代碼中設置斷點在開發工具
0

在瀏覽器中運行Javascript代碼沒有真正的「中斷器」。 ECMAscript在所謂的「UI線程」中執行,這意味着所有渲染的東西都發生在ECMAscript代碼執行的同一隊列中。

這反過來意味着,ECMAscript中的無限循環會自動掛起整個瀏覽器的交互。

,以避免這一點的唯一方法是寫清楚,乾淨的代碼。如果它發生,大多數瀏覽器都意識到UI線程忙得太久,並詢問用戶是否要取消正在運行的JavaScript進程。如果你不想等,那麼唯一的選擇是殺死整個瀏覽器/標籤進程。

但是,如果你知道你的腳本的某些部分確實可能導致無限循環,你可以手動在某種developer tools設置breakpoints或者你可以直接將debugger;關鍵字爲你的腳本。這會導致JavaScript解釋器在當前行中停止,並且您有機會分析下一個代碼(例如條件),並在它看起來很糟糕時取消執行。

+2

我無法做任何事情,試試'while(1){}'循環,並嘗試獲得一個乾淨的退出(關閉標籤,關閉窗口等) – skrat 2012-03-13 16:27:34