我找不到在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
获得消息,因为在错误冒泡到未被捕获之后,在窗口级别触发了自动错误(请参阅this fiddle:最终错误是“未捕获” )包含我手动提出的原始错误。
所以在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上。
答案 0 :(得分:1)
我修改了你的代码作为演示:
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 page for try-catch
编辑:我刚想到您可能正在尝试捕获jQuery错误事件。如果是这种情况,您的事件绑定是正确的,但您不应该使用throw
编辑2 :我应该早点注意到这一点,但您正在尝试使用window.addEventListener
侦听DOM错误事件。错误事件不会中断执行。例外。
使用以下代码替换代码throw new Error('sdasd');
:
var customEvent = new CustomEvent('error')
window.dispatchEvent(customEvent);
那应该可以解决你的问题。我使用the MDN page on custom events作为参考。