2010-04-21 28 views
9

我收到Firefox「無響應腳本」的錯誤消息。這個錯誤是由於我添加到我的頁面的一些JavaScript。Javascript:無響應的腳本錯誤

我想知道如果無響應是由代碼循環(函數互相調用循環或無休止的「循環」)或可能有其他原因造成的嗎?

你能幫我調試這些類型的錯誤嗎?

感謝

+0

究竟什麼是你問? – SLaks 2010-04-21 19:55:23

+1

如果您的代碼正在等待AJAX​​回調,並且花費很長時間也可能是一個原因。 – Kasturi 2010-04-21 19:57:02

+1

獲取Firebug並學習如何使用它。然後你可以自己調試這些錯誤。 – Robusto 2010-04-21 19:59:17

回答

8

按照Mozzila Knoledgebase

當JavaScript代碼的時間超過預定量不再運行,Firefox會顯示一個對話框,上面寫着警告:腳本沒有響應。這個時間由設置dom.max_script_run_time和dom.max_chrome_script_run_time給出。增加這些設置的值將導致警告的出現頻率降低,但會失去目的:通知您擴展或網站出現問題,以便您可以停止失控腳本。

此外:

發現問題

要確定哪些腳本運行時間過長的來源,點擊警告對話框停止腳本按鈕,然後轉到工具|錯誤控制檯。錯誤控制檯中的最新錯誤應標識導致問題的腳本。

檢查錯誤控制檯應該很明顯你的JavaScript的哪一部分是造成這個問題。從那裏,或者刪除違規的代碼片段,或者改變它,使其不會像資源密集型一樣。

編輯:正如在該主題作者的評論中提到的,強烈建議使用Firebug來調試javascript問題。 Jonathan Snook在使用斷點調試javascript的複雜部分時有一個有用的視頻。爲了避免這種

9

一種方法是用這樣的超時來包裝你可憐的高性能的代碼:

setTimeout(function() { 
// <YOUR TIME CONSUMING OPERATION GOES HERE> 
}, 0); 

這不是防彈的解決方案,但它可以在某些情況下解決這一問題。

+1

通常,繁重的任務是在for循環中。有關如何將帶有繁重任務的for循環轉換爲將系統控制傳回瀏覽器的結構的詳細說明,請參閱:http://stackoverflow.com/questions/4460263/disabling-the-long-運行腳本,消息在互聯網資源管理器/ 11619030#11619030 – 2012-07-23 19:58:42

1
  1. 有可能被註釋掉的代碼,以確定哪些部分導致它是一個無限循環中的代碼
    • 開始的地方
    • 太多循環:有可能您的計數器變量名稱發生衝突,導致變量保持重置狀態,導致無限循環。
  2. 嘗試儘可能地爲你的對象創建哈希以至於讀取時間爲O(1),並以某種方式緩存的數據
  3. 忌用js libs一些方法可能會引起開銷。例如。 .htm() VS .innerHTML
  4. 的setTimeout()yes和no - 取決於你如何chunkify你的代碼
4

我們需要按照這些步驟在Firefox停止腳本。

步驟1 啓動Mozilla Firefox瀏覽器。

步驟2 點擊在Firefox窗口頂部的地址欄中的任意位置,以突出整個領域。

步驟3 輸入 「about:config中」(在這裏和整個省略了引號),然後按 「Enter」 鍵。 A「這可能會使您的保修失效!」警告信息可能會出現;如果有,請點擊「我會小心的,我保證!」按鈕打開包含所有Firefox設置的頁面。

第4步 在頁面頂部的「搜索」框中單擊一次,然後鍵入「dom.max_script_run_time」。該設置位於並顯示;它的默認值爲10.

步驟5 雙擊設置以打開「輸入整數值」窗口。

步驟6 輸入「0」,然後單擊「確定」將值設置爲零。 Firefox腳本現在無限期運行,不會拋出任何腳本錯誤。 步驟7

重新啓動的Mozilla Firefox。