捕获所有未处理的 javascript 异常

2022-08-30 04:17:17

我试图找到或找出一种方法,在警报框中显示应用程序中所有未处理的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未处理的异常,然后在警报框中将它们打印到屏幕上?

谢谢!杰森


答案 1

您可以使用 window.onerror 方法执行此操作。

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

答案 2

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

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。我在阿塔图斯工作。