104

我正在运行一个 ASP.NET 站点,我无法通过手动测试找到一些 JavaScript 错误。

是否有可能在客户端捕获所有 JavaScript 错误并将它们记录在服务器上,即在 EventLog 中(通过 Web 服务或类似的东西)?

4

8 回答 8

71

您可以尝试为onerror 事件设置自己的处理程序并使用 XMLHttpRequest 告诉服务器出了什么问题,但是由于它不是任何规范的一部分,因此支持有点不稳定

这是使用 XMLHttpRequest 记录 JavaScript 错误的示例:

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg=" + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line=" + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};
于 2008-09-23T07:12:28.917 回答
32

简短的回答:是的,这是可能的。

更长的答案:人们已经写过如何(至少部分地)通过编写自己的代码来解决这个问题。但是,请注意,似乎有一些服务可以确保所需的 JS 代码在许多浏览器中都能正常工作。我发现了以下内容:

我不能代表任何这些服务,因为我还没有尝试过。

于 2011-09-14T11:30:12.257 回答
12

我刚刚在工作中的项目上实现了服务器端错误日志记录。旧代码和使用jQuery的新代码混合在一起。

window.onerror将 jQuery 事件处理程序和 onready 函数与错误处理函数结合使用并包装起来(请参阅:JavaScript 错误跟踪:为什么 window.onerror 不够)。

  • window.onerror: 捕获 IE 中的所有错误(以及 Firefox 中的大多数错误),但在 Safari 和 Opera 中不执行任何操作。
  • jQuery 事件处理程序:捕获所有浏览器中的 jQuery 事件错误。
  • jQuery 就绪函数:捕获所有浏览器中的初始化错误。

一旦我发现了错误,我会添加一些额外的属性(url、浏览器等),然后使用 ajax 调用将其发布回服务器。

在服务器上,我有一个小页面,它只接受发布的参数并将它们输出到我们的普通服务器日志框架。

我想为此开源代码(作为 jQuery 插件)。有兴趣的可以私信我,有利于说服老板!

于 2008-09-23T12:20:42.590 回答
2

如果您使用 Google Analytics,您可以将 javascript 错误记录到 Google Analytics 事件中。

看到这个应用程序:http ://siteapps.com/app/log_javascript_errors_with_ga-181

希望能帮助到你。

于 2013-04-15T21:26:06.197 回答
0

您可能会通过 try/catch 对服务器进行 Ajax 调用,但这可能是您能做的最好的事情。

我可以建议 JavaScript 单元测试吗?可能与JSUnit一起使用?

于 2008-09-23T06:46:00.837 回答
0

另外我推荐使用TraceTool实用程序,它带有 JavaScript 支持,对于 JS 监控非常方便。

于 2008-09-23T07:21:40.983 回答
0

如果您想将客户端错误记录回服务器,您将不得不进行某种服务器处理。最好的办法是拥有一个可以通过 JavaScript (AJAX) 访问的 Web 服务,并将错误日志信息传递给它。

不是 100% 解决问题,因为如果问题出在托管 Web 服务的 Web 服务器上,您遇到了麻烦,您的另一种选择是通过查询字符串通过标准页面发送信息,一种方法这样做是通过动态生成图像标签(然后将其删除),因为浏览器将尝试加载图像的源。不过,它很好地绕过了跨域 JavaScript 调用。请记住,如果有人关闭了图像,您将遇到麻烦;)

于 2008-09-23T07:42:39.840 回答
0

我最近一直在使用Appfail,它可以捕获 asp.net 和 JavaScript 错误

于 2013-02-03T19:15:32.563 回答