Javascript 获取 Window 错误代码

Javascript get Window Error Code

我想弄清楚是否有一块 Javascript 可以用来在 window 中获取当前的 javascript 错误,如果有的话。

在内部,我们有几个网站供各地的用户使用。他们中的一些人使用与我们相同的硬件和系统,而其他人则使用环境不同的 VM。

简而言之,我们遇到了很多工具无法正常工作的支持问题,我们必须解释如何在 IE 中检查 JS 错误。

我想制作一个小书签,他们可以在他们的工具栏中使用,当他们遇到问题时,它会检查是否有 window 错误,然后我可以用它做一些事情。

我知道有 window.onerror=function(msg, url, linenumber){} 但那是错误发生的时候。我正在寻找一种在用户单击小书签时随时检查错误的方法。

onerror 不够好。它为您提供一条消息、一个文件和一个行号。没有堆栈跟踪,没有参数检查等。它还捕获第三方代码抛出的错误,例如有问题的 Skype 插件。

您要做的是将所有代码包装在您自己的自定义错误处理函数中。

wrap_try_catch(function () {
    do_stuff();
})();

跨异步函数的 try-catch 不起作用,因此请确保包装所有回调:

add_event(obj, "click", function () {});

function add_event(obj, what, callback) {
    obj.addEventListener(what, wrap_try_catch(callback));
}

同样,如果您曾经使用过 setTimeoutsetInterval,您将希望包装它们。

如果你很聪明,你甚至可以弄清楚如何通过异步调用捕获堆栈跟踪,这样你就可以看到发起 xmlhttprequest 的位置(而不是将 onreadystatechange 视为起源)。


使用此方法,您可以通过让 catch 实施 错误报告 请求来实施主动错误报告。您可以将错误摘要消息发送回您的服务器,以便记录所有错误。

总是包装这些函数的影响非常大,尤其是在您没有像这样设置任何东西的情况下。这当然是可能的。


这甚至适用于非常旧版本的 IE。我们曾经有一个适用于 IE6 的版本。我们现在支持的最低版本是 IE9,因此我们可以使用更多功能。

我认为 IE 与 IE10 一样支持堆栈跟踪。 Chrome Firefox 一直支持它。

小书签似乎不是这里的最佳方法,因为当用户点击它时,为时已晚...错误已经发生。

除非错误改变了页面上您可以在书签中依赖的内容的状态...

我认为处理这个问题的最好方法是在它发生之前,这意味着在它发生的页面上处理它......

错误报告应该是应用程序的一部分