捕获所有未处理的 javascript 异常

我试图找到或找到一种方法来显示在一个警告框中的所有未处理的 javascript 异常应用程序。我希望所有这些都在客户端完成,而不使用任何服务器端代码。我用 MVC3作为一个环境。

过去几天我一直在研究但还没找到我要找的东西。

我发现下面的两种方法看起来几乎就是我要找的方法,除了这些方法的设置,你必须将一个函数名传递到一个自定义方法中来打印一个特定函数中所有未处理异常的堆栈跟踪。我正在寻找一种不必手动将函数名传递给自定义方法的方法,该方法打印所有未处理异常的堆栈跟踪。我希望这些自定义方法能够“监听”整个应用程序中所有未处理的异常。

Http://eriwen.com/javascript/js-stack-trace/

还有一些类似于前面的链接:

Https://github.com/eriwen/javascript-stacktrace

下面是上面第2个链接中的基本代码,它打印了一个指定的 javascript 函数的堆栈跟踪:

instrumentFunction: function (context, functionName, callback) {
context = context || window;
var original = context[functionName];
context[functionName] = function instrumented() {
callback.call(this, printStackTrace().slice(4));
return context[functionName]._instrumented.apply(this, arguments);
};
context[functionName]._instrumented = original;
}


function printStackTrace(options) {
options = options || {
guess: true
};
var ex = options.e || null,
guess = !! options.guess;
var p = new printStackTrace.implementation(),
result = p.run(ex);
return (guess) ? p.guessAnonymousFunctions(result) : result;
}

那么,总结一下,你们是否知道有什么方法可以让某种类型的“监听器”来监听所有未处理的 javascript 异常,然后将它们打印到一个警告框中的屏幕上?

谢谢! 杰森

95314 次浏览

看看 http://log4javascript.org,它是基于 Log4J 的。如果您的大部分代码都包装在 try/catch 语句中以处理异常,那么您可以使用这个库作为一个公共接口,将输出发送到最终用户可以看到的始终可用的“对话框”或日志窗口。您甚至可以使用一个按钮执行 window.print ()将对话框的内容打印到打印机或 PDF。祝你好运。

您可以通过使用 window.onerror 方法来实现这一点。

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
alert("Error occured: " + errorMsg);//or any message
return false;
}

您可以正确地使用 window.onerror,或者(令人惊讶的是!)绑定到“ error”事件:

window.onerror = function (message, file, line, col, error) {
alert("Error occurred: " + error.message);
return false;
};
window.addEventListener("error", function (e) {
alert("Error occurred: " + e.error.message);
return false;
})

如果你想跟踪 JavaScript 错误,你可以试试 阿塔斯。我在 Atatus 工作。

除了

window.onerror = function (message, file, line, col, error) {
alert("Error occurred: " + error.message);
return false;
};
window.addEventListener("error", function (e) {
alert("Error occurred: " + e.error.message);
return false;
})

您还可以捕获侦听 unhandledrejection事件的承诺回调(.then())中触发的所有错误

window.addEventListener('unhandledrejection', function (e) {
alert("Error occurred: " + e.reason.message);
})