134

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

最近几天我一直在研究,但没有找到我想要的东西。

我在下面找到了 2 种方法,它们似乎几乎是我正在寻找的,除了这些方法是设置的,因此您必须将函数名称传递给自定义方法以打印该方法中所有未处理异常的堆栈跟踪具体功能。我正在寻找一种不必手动将函数名称传递给打印所有未处理异常的堆栈跟踪的自定义方法的方法。我希望这些自定义方法只“监听”整个应用程序中所有未处理的异常。

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

也类似于上一个链接:

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

这是上面第二个链接中的基本代码,用于打印指定 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 未处理的异常,然后在警报框中将它们打印到屏幕上吗?

谢谢!杰森

4

4 回答 4

149

您可以使用 window.onerror 方法来做到这一点。

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
    alert("Error occured: " + errorMsg);//or any message
    return false;
}
于 2013-04-24T07:28:49.483 回答
59

您可以使用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。我在阿塔图斯工作。

于 2016-06-09T11:21:01.740 回答
53

此外

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;
})

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

window.addEventListener('unhandledrejection', function (e) {
  alert("Error occurred: " + e.reason.message);
})
于 2018-03-29T15:47:49.630 回答
-3

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

于 2013-04-24T01:47:50.297 回答