为AJAX应用程序构建一个错误提交系统

2016-01-29 11:21 27 1 收藏

为AJAX应用程序构建一个错误提交系统,为AJAX应用程序构建一个错误提交系统

【 tulaoshi.com - Javascript 】

  摘要 当一些应用程序崩溃时,它们往往向用户提供一个机会来提交关于该错误的信息。该信息能够帮助开发者追踪并修正错误。本文将向你展示如何在你的JavaScript/AJAX应用程序中实现这样的功能。

  一、 引言

  如果可以存取终端用户的计算机的话,那么终端用户的JavaScript错误就很容易调试。既然你不能实现这样的操作,那么你可以采取下面这样的措施:让用户向你发送你修正该问题需要的内容。

  当象Mozilla浏览器这样的应用程序崩溃时,它们会启动一个错误提交程序。这些程序将询问用户是否愿意提交错误报告。如果用户愿意的话,该程序将要求他们输入有关他们的程序崩溃时的尽可能多的信息。这个信息,连同该错误提交程序自己的分析数据,一同提交到电子邮件中心以便开发人员和工程经理读取分析。

  这种功能对于开发者是极其有用的。既然该程序运行于客户端机器上,这是唯一取得有关于开发者不能在他们自己的开发系统上重新生成相同的错误信息的方式。他们还能够监视该特定的错误的频率和严重性以便决定应该首先修正哪些错误。

  本文将向你展示如何在JavaScript/AJAX程序中支持这种错误提交功能。当在你的代码中发生一个错误时,该系统将弹出一个用户能够提交错误信息的窗口。

  二、 问题

  如何在我的JavaScript/AJAX应用程序中安装一个用户错误提交程序?

  三、 解答

  把代码放到一个包装程序中,该包装程序允许用户提交一个包含详细错误信息的电子邮件。

  (一) 捕获错误

  下列文件被包括在本文相应的下载源代码中,你可以利用它们来实现上面的解决方案:

  ·talkback.js-这个文件包括本系统的完整源码

  ·test.html-一个使用talkback.js来处理一个发现错误的示例脚本

  这里的test.html页面包含一些JavaScript代码,其中抛出一个异常。这个页面把函数fun_a()安装为body部分的onload处理器。该fun_a()函数又调用fun_b(),fun_b()又调用fun_c()。最后,fun_c()存取一个不存在的对象中的不存在的域,并触发一个真正的JavaScript异常。

  首先,在用户能够看到这个错误之前你需要捕获它。这样以来,你就能够使用户有一个机会来提交错误信息;但是,你不想让他或她的看到任何其它内容。我们的目标是尽量减少该错误向用户暴露的内容。

  这是很容易实现的。假定主程序可以经由下列函数激活:

function fun()
{
 //程序在此.
}
fun = tb_wrap( fun);
  请注意这里对tb_wrap()的调用。这样以来,就可以把fun()函数放到一个能够捕获任何异常并且处理它们的包装器中。而且,这样以来,该用户就不会看到任何发生在fun()中的异常。

  (二) 收集错误信息

  一旦你捕获了错误,那么你需要提取尽可能多的信息。你把越多的错误数据发送回开发者,他们越有可能发现并修正该错误。

  遗憾的是,根据用户运行的浏览器不同,错误对象具有不同的属性。大多数情况下,你能够依赖name和message属性。注意,stack属性中包含一个极其有用的栈踪迹,只是它仅可用于最近版本的基于Mozilla的浏览器中。[next]  (三) 创建一个Mailto:链接

  为了使用户能够向你发送关于该错误的信息,你应该提供给他们一个他们能够点击的链接。这样很好,因为它让这些用户自己决定愿不愿意受麻烦,而且他们能够避免发送多份相同的错误报告。

  这个mailto:链接能够打开用户的电子邮件程序,然后就象下面这样填充邮件的Subject和Body域:

Subject: Error from http://myserver.com/myapp/index.cgi?id=234
Body:

ReferenceError: nonexistent_variable is not defined
fun_c()@http://myserver.com/myapp/index.cgi?id=234:19
fun_b()@http://myserver.com/myapp/index.cgi?id=234:14
fun_a()@http://myserver.com/myapp/index.cgi?id=234:9
apply(null,[object Object])@:0
()@http://myserver.com/myapp/livedebug.js:106
onload([object Event])@:0 @:0
  用户能够添加他们喜欢的另外的任何信息,然后发送该消息。

  (四) 实现细节

  下面这些函数定义在talkback.js文件中:

  ◆tb_wrap(fun)-这个函数负责把函数fun放到一个包装器中,由该包装器捕获任何异常并且向用户提供一个机会来把这些错误发送回开发者。当发生一个异常时,它把该错误对象添加到一个异常列表并且向该用户提供一个提交链接。如果任何更深的异常发生,那么它将把它们添加到异常列表和提交链接。

  ◆tb_show_talkback_link()-这个函数显

来源:http://www.tulaoshi.com/n/20160129/1482217.html

延伸阅读
标签: Web开发
一、简介 AJAX,一个异步JavaScript和XML的缩略词,是最近出来的技术词语。异步意味着你可以经由超文本传输协议(HTTP)向一个服务器发出请求并且在等待该响应时继续处理另外的数据。这就意味着,例如,你可以调用一个服务器端脚本来从一个数据库中以XML方式检索数据,把数据发送到存储在一个数据库的服务器脚本,或者简单地装载一个XML...
标签: 电脑入门
网民使用电脑中经常遇到因各种原因引起的应用程序正常初始化失败的错误,但是网上的方法都很难解决问题,金山安全专家指出,现在很多病毒木马喜欢劫持应用程序和系统文件,会导致出现应用程序出错,请立刻下载金山卫士进行木马查杀。 应用程序发生异常的案例 网友李刚为qq农场的发烧友,想尝试通过qq农场外挂带来的自动化偷菜的的快感,一次...
今天在MSN的核心讨论组上看到两篇文章.讨论的乃是应用程序是否没有响应.原文如下: How is it possible to determine a process is "not responding" like NT Task Manager do? The heuristic works only for GUI processes, and consists of calling SendMessageTimeOut() with SMTO_ABORTIFHUNG. T...
一、 引言 如果你是一个Java软件和Ajax开发者,那么,Google Web Toolkit(GWT)应该已经引起你的关注。 Google公司已经于2006年5月在Apache许可协议下发布了这种免费的开发工具包。GWT的设计目的是为了简化用Java语言开发Ajax应用程序。Google初始发行的beta版本可以适用于Windows和Linux平台,并许诺稍后要发行一个Mac OS X版...
标签: 电脑入门
故障分析:造成应用程序错误的情况有很多,图老师小编例举一下几个哦: 1、首先可能是电脑被中毒了,直接用杀毒软件比如360、金山毒霸对电脑进行查杀,查杀完成后将结果处理即可。 2、如果电脑没有查杀到病毒的话,那查看出现提示应用出现错误的时候提示出丢失缺少某个文件,那么我找到该文件锁对应的组件,可能是文件丢失导致组件不能使...

经验教程

621

收藏

58
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部