【发布时间】:2010-04-12 10:40:12
【问题描述】:
作为大多数生产环境,我们已经设置了一些东西,以便在我们的 Web 应用程序出现错误时向我们发送通知。问题当然是这仅涵盖服务器端的错误。
我向社区提出的问题是:您如何处理客户端错误,尤其是在 javascript 中?
还有其他服务质量问题,例如处理速度慢和其他可能由客户端机器引起的问题?
【问题讨论】:
标签: javascript error-handling frameworks usability
作为大多数生产环境,我们已经设置了一些东西,以便在我们的 Web 应用程序出现错误时向我们发送通知。问题当然是这仅涵盖服务器端的错误。
我向社区提出的问题是:您如何处理客户端错误,尤其是在 javascript 中?
还有其他服务质量问题,例如处理速度慢和其他可能由客户端机器引起的问题?
【问题讨论】:
标签: javascript error-handling frameworks usability
您可以使用 window.onerror 事件处理客户端 JavaScript 错误
在处理程序内部向服务器端错误挖掘器发出 Ajax 请求并记录错误。
http://www.javascriptkit.com/javatutors/error.shtml
并非所有浏览器都支持window.onerror,jQuery可以用自己的事件处理程序填补空白:window.onerror和jQuery(window).error的组合就足够了
【讨论】:
对于客户端的 JavaScript 错误,您无能为力。您可以捕获 window.onerror 并使用它来 AJAX 报告回来,但是:
(a) WebKit 或 Opera 不支持它。要捕获所有错误,您必须将每个直接执行、事件和超时入口点包装在 try { ... } 中,这非常混乱,并且比 onerror 处理程序提供的信息更少。
(b) 您可能会被错误报告所淹没,您无能为力,由于缺乏信息,几乎无法进行调试。您可能能够在仅由您认识的客户访问的应用程序上侥幸逃脱,但在公共访问站点上,很多错误都是虚假的。由以下因素引起的东西:
与托管脚本或 AJAX 的站点的连接失败或被防火墙阻止;
意外的安全设置(浏览器可以选择任意阻止许多接口);
损坏的浏览器插件、类似 GreaseMonkey 的脚本、过滤代理和伪造的“互联网安全”工具会干扰您的代码;
行为异常的不受支持的代理,例如移动浏览器(尤其是令人震惊的 IEMobile),以及如果它们有权访问的自动浏览器机器人;
许多由第三方内容(如广告)引起的错误(如果有的话)。
同样,对于一个使用受限的应用程序,您可以直接联系遇到问题的任何用户,它可能有用,但对于公众使用的网站,它是行不通的。
最好使用“渐进式增强”来确保您的应用程序在 JavaScript 失败时仍然可以工作。
【讨论】: