har*_*333 82 javascript exception
捕获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);
}
Run Code Online (Sandbox Code Playgroud)
如果您想到任何其他测试用例,请提及它们.其中一些案例提到了ErrorHandler.handleError方法.这只是使用try ... catch时的建议指南.
Kar*_*arl 23
如果您使用像jQuery这样的库来分配所有事件处理程序,您可以使用window.onerrorjQuery事件处理程序代码的组合和包装以及带有错误处理函数的ready函数(请参阅:JavaScript错误跟踪:为什么window.onerror不够用).
window.onerror:捕获IE中的所有错误(以及Firefox中的大多数错误),但在Safari和Opera中无效.eye*_*ess 21
WebKit(Safari,Chrome等)现在似乎支持onerror.
原帖:据我所知,WebKit/Safari不支持该onerror事件.这是一个该死的耻辱.
实际上,jquery方法并不是那么糟糕.看到:
http://docs.jquery.com/Events/error#fn
和:
$(window).error(function(msg, url, line){
$.post("js_error_log.php", { msg: msg, url: url, line: line });
});
Run Code Online (Sandbox Code Playgroud)
使用您自己的异常处理程序捕获所有异常并使用instanceof.
$("inuput").live({
click : function (event) {
try {
if (somethingGoesWrong) {
throw new MyException();
}
} catch (Exception) {
new MyExceptionHandler(Exception);
}
}
});
function MyExceptionHandler(Exception) {
if (Exception instanceof TypeError ||
Exception instanceof ReferenceError ||
Exception instanceof RangeError ||
Exception instanceof SyntaxError ||
Exception instanceof URIError ) {
throw Exception; // native error
} else {
// handle exception
}
}
Run Code Online (Sandbox Code Playgroud)
由于没有try-catch块,MyExcetpionHandler将抛出本机错误.
访问http://www.nczonline.net/blog/2009/03/10/the-art-of-throwing-javascript-errors-part-2/
| 归档时间: |
|
| 查看次数: |
63584 次 |
| 最近记录: |