在服务器上记录客户端JavaScript错误

时间:2020-03-06 14:34:58  来源:igfitidea点击:

我正在运行一个ASP.NET站点,在该站点中,我只能通过手动测试来查找一些JavaScript错误。

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

解决方案

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

我可以建议改用JavaScript单元测试吗?可能是JSUnit吗?

我们可以尝试为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);
};

我还建议使用TraceTool实用程序,它具有JavaScript支持,并且非常方便进行JS监视。

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

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

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

我结合使用" window.onerror"和包装jQuery事件处理程序以及具有错误处理功能的onready函数(请参阅:JavaScript错误跟踪:为什么window.onerror不够用)。

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

发现错误后,我向其中添加了一些其他属性(URL,浏览器等),然后使用ajax调用将其发布回服务器。

在服务器上,我有一小页,它仅接收发布的参数并将其输出到我们的常规服务器日志记录框架。

我想为此开源代码(作为jQuery插件)。如果有人感兴趣,请告诉我,这将有助于说服老板!