2012-03-27 105 views
1

有沒有辦法告訴瀏覽器,例如Opera或Chrome,如果它遇到未處理的異常時不停止腳本執行?我只需要在瀏覽器中測試一些JS腳本,但該頁面還包含用於另一個(非常規瀏覽器)執行環境的代碼,因此使用try/catch包裝來修改代碼是不實際的。忽略JS瀏覽器中未捕獲的異常

對於Chrome我試圖把代碼設置爲window.onerror,它只是返回true,然後控制檯中沒有出現錯誤,但腳本的執行無論如何都放棄了。

具體來說,該頁面包含Appcelerator Titanium平臺的代碼,但我只測試一般的jQuery代碼,所以我想在瀏覽器中執行它。

+2

你已經在try/catch中包裝了你的函數嗎?只是問問。 – kpcrash 2012-03-27 19:00:58

+0

正如我所說,我不應該改變任何頁面包含的腳本。 – 2012-03-27 19:09:45

+0

正確,但是如果您從外部來源調用函數,則仍然可以封裝這些調用,並且它應該停止瀏覽器針對錯誤發出警報。 – kpcrash 2012-03-27 19:10:58

回答

0

儘管您的想法看起來很實際,但實際上這是不可能實施的。

相比之下,Java編程語言力量你處理檢查型異常(例外您可以從恢復),而unchecked異常(如RuntimeException - 你不能收回的例外),只需正常運行時你的控制範圍之外發生。由於它們本質上是不可恢復的,您的程序必須停止。

從JS JVM引發的異常與java不同,在checked和unchecked類別中不可能分開。因爲沒有這樣的區別,所以不可能避免腳本停下來。

如果將功能/無窮大分開了怎麼辦?你應該如何恢復? 對於每個不同的情況都存在明顯的答案。這就是爲什麼對您的擔心唯一剩下的和有效的迴應是每次您害怕發生一個Exception並使用try catch塊,並停止您的代碼並針對該情況處理它。


對於window.onerror事件處理程序,這是不相干的這件事情,因爲它沒有趕上運行時異常,它捕獲當在try catch塊沒有被捕獲原始異常時引發的錯誤。這就是爲什麼您會在實際的原始異常消息中附加一個宏觀的「未捕獲的異常:xxxxx」。例外已經發生,你的腳本已經停止,你所能做的就是按照你想要的方式顯示它。

2

如果調用遞延時尚可疑代碼

setTimeout(THIS_MIGHT_THROW, 0) 

然後拋出將終止「線程」或「微任務」,但沒有任何錯誤,影響您執行的其餘部分。

+0

有些日子我喜歡這個,有些日子我討厭這個... – Sebas 2015-07-18 16:57:23