【发布时间】:2010-09-17 08:50:17
【问题描述】:
捕捉 JavaScript 中抛出的所有异常的最佳技术是什么?
显然,最好的技术是使用 try...catch。但是对于异步回调等等,这可能会变得很棘手。
我知道 IE 和 Gecko 浏览器支持 window.onerror,但是 Opera 和 Safari 呢?
这里有一堆测试用例,我希望有一个集中的异常处理解决方案:
// ErrorHandler-Test1
var test = null;
test.arg = 5;
// ErrorHandler-Test2
throw (new Error("Hello"));
// ErrorHandler-Test3
throw "Hello again";
// ErrorHandler-Test4
throw {
myMessage: "stuff",
customProperty: 5,
anArray: [1, 2, 3]
};
// ErrorHandler-Test5
try {
var test2 = null;
test2.arg = 5;
} catch(e) {
ErrorHandler.handleError(e);
}
// ErrorHandler-Test6
try {
throw (new Error("Goodbye"));
} catch(e) {
ErrorHandler.handleError(e);
}
// ErrorHandler-Test7
try {
throw "Goodbye again";
} catch(e) {
ErrorHandler.handleError(e);
}
// ErrorHandler-Test8
try {
throw {
myMessage: "stuff",
customProperty: 5,
anArray: [1, 2, 3]
};
} catch(e) {
ErrorHandler.handleError(e);
}
如果您想到任何其他测试用例,请提及它们。其中一些案例提到了 ErrorHandler.handleError 方法。这只是使用 try...catch 时的建议准则。
【问题讨论】:
-
只是因为很明显你没有注意到我的回答中的 cmets:当它读作一个问题时,你似乎对我的“问题中陈述”投了反对票:“但是 Opera 和 Safari 呢? "我专门回答了这里提出的一个问题。什么鬼?
-
在 WebKit 中,
window.onerror的缺失自 2003 以来一直是个问题,但它看起来像是 finally getting resolved。当然,Opera 还是会固执己见。 -
仅供参考 window.onerror 工作正常 - Firefox 7.0.1 - IE 8 - Chrome 16 - Opera 11.60
-
不确定为什么关闭。投票决定重新开放。
-
同意,这是一个有用的问题。我唯一能想到的是 casperOne 担心这会变成某种浏览器战争讨论?
标签: javascript exception