在服务器上记录客户端JavaScript错误
我正在运行一个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插件)。如果有人感兴趣,请告诉我,这将有助于说服老板!