[英]catching error event message from firefox
我找不到一種方法來捕獲firefox下的錯誤消息:
window.addEventListener("error", handleException, false);
...
function handleException(e) {
alert(e);
return false;
}
...
<script>
throw new Error('sdasd');
</script>
這很好地輸入了handleException
方法,但是e
參數是firefox下的error event
,我不知道如何獲取相關的消息 。 例如,在chrome中,我通過e.message
獲取消息,因為在錯誤冒泡到未捕獲之后,在窗口級別(請參閱此小提琴 :最終錯誤為“Uncaught”)觸發了包含原始內容的自動錯誤我手動提出的錯誤。
所以在firefox下有相同的行為(如果你在firefox下運行小提琴你會看到消息是“未定義”)我找到了一個解決方法,包括一個錯誤提升函數來設置手動“最后錯誤”架構:
function err(I_sText) {
g_lastManualError = new Error(I_sText);
throw g_lastManualError; //this variable is global so I can get the message from anywhere
}
所以不要throw new Error(..)
只是調用err(..)
。 這是有效的,至少對於用戶定義的異常,這是我最關心的問題。 在我的處理程序handleException
我正在咨詢全局變量。
你知道我怎么辦? 我對這個解決方案不滿意。
謝謝你,S。
我作為演示稍微修改了你的代碼:
function handleException(e) {
console.log(e);
alert(e);
return false;
}
window.addEventListener("error", handleException, false);
try {
throw new Error('sdasd');
}
catch (e) {
console.log(e)
}
console.log('after exception 1');
throw new Error('foo');
console.log('after exception 2');
運行此代碼(在Firebug中)向我展示了這一點:
Error: sdasd
[Break On This Error]
Filtered chrome url chrome://firebug/content/console/commandLineExposed.js
comman...osed.js (line 175)
<System>
after exception 1
"Error: foo ` throw new Error('foo');` @14"
如果您嘗試捕獲錯誤,請使用try {...} catch { ...}
。 看起來你只是綁定到一個錯誤事件,所以你拋出的異常仍會傳播到窗口並告訴JS引擎停止。 在Chrome中運行此代碼,您會看到您從未看到“異常2之后”,但您會看到“異常1之后”。
異常(由throw
創建)的目的是停止代碼執行,除非有代碼處理該特定異常。 您可以在MDN頁面上看到try-catch的示例
編輯 :我剛想到您可能正在嘗試捕獲jQuery錯誤事件。 如果是這種情況,您的事件綁定是正確的,但您不應該使用throw
測試它
編輯2 :我應該早點注意到這一點,但是你正試圖用window.addEventListener
來監聽DOM錯誤事件。 錯誤事件不會中斷執行。 例外情況。
替換你的代碼throw new Error('sdasd');
使用此代碼:
var customEvent = new CustomEvent('error')
window.dispatchEvent(customEvent);
那應該可以解決你的問題。 我使用自定義事件的MDN頁面作為參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.