簡體   English   中英

從firefox捕獲錯誤事件消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM