捕获所有未处理的javascript异常

捕获所有未处理的javascript异常,javascript,Javascript,我试图找到或想出一种方法,在一个警报框中显示应用程序中所有未处理的javascript异常。我希望所有这些都在客户端完成,而不使用任何服务器端代码。我使用MVC3作为环境 最近几天我一直在研究,还没有找到我想要的东西 我在下面找到了两种方法,它们看起来几乎就是我要寻找的,除了这些方法设置为必须将函数名传递到自定义方法中,以打印该特定函数中所有未处理异常的堆栈跟踪。我正在寻找一种不必手动将函数名传递给打印所有未处理异常的堆栈跟踪的自定义方法的方法。我希望这些自定义方法只是“侦听”整个应用程序中所有

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

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

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

与上一个链接类似:

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

谢谢!
Jason

检查它是否基于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;
})
您还可以捕获promise回调(
.then()
)中触发的所有错误,以侦听
未处理的Rejection
事件

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

有一件事。。。wy你会用警报箱吗?!?您可以使用console.log(错误消息)来…我认为这个问题将帮助您解决这个问题。您可能应该看看这个问题:比尝试将我的整个应用程序包装在try/catch块中要好得多。:)谢谢请注意:“请注意,某些/许多错误事件不会触发window.onerror,您必须专门侦听它们。”-无需在该代码中包含函数名(myErrorHandler)。。。可以是function(errorMsg,url,lineNumber)@JoelFan为了调试的目的,最好有函数名。调试器将使用函数名,而不是显示为匿名函数。这太棒了,谢谢!我一直在尝试调试一个复杂的照片缩放脚本,该脚本在100%的时间内都可以正常工作,除了在mobile safai上随机失败,并且没有“控制台”或“开发人员”窗口来查看发生了什么。当然,我有自己的“调试”窗口,我可以用一个秘密按钮打开,但我无法全局查看我没有“尝试/捕获”的所有错误。这一点让我知道了问题的确切位置,并且避免了我把更多的头发撕下来!但愿我能投两次票!为什么“return false”语句?@kumaresansd它允许触发默认事件处理程序:是否需要同时使用
window.onerror
window.addEventListener(“error”
),或者使用其中一个就足够了?可以使用其中一个。如果使用
window.addEventListener(“error”)
,发送
useCapture
设置为
true
,以便捕获未出现的元素错误。谢谢!!
错误
事件未捕获我的特定错误。
未处理的弹出
成功。
抛出新错误('tja'))
在最新的chrome浏览器中没有用这种方法捕获…@JavierPerez我使用v80测试时附加了事件,并在之后直接抛出了一个错误,但没有捕获,也没有捕获语法错误。这如何回答捕获所有未处理异常的问题?