IE中JavaScript 的异常处理
错误类型
编程中我们会遇到四种错误:编译错误、逻辑错误、输入/验证错误、运行时错误,但是在JavaScript中我们只能最后两种错误。
JavaScript 1.5定义了六种错误类型:
- EvalError: Raised when the eval() functions is used in an incorrect manner.
- RangeError: Raised when a numeric variable exceeds its allowed range.
- ReferenceError: Raised when an invalid reference is used.
- SyntaxError: Raised when a syntax error occurs while parsing JavaScript code.
- TypeError: Raised when the type of a variable is not as expected.
- URIError: Raised when the encodeURI() or decodeURI() functions are used in an incorrect manner.
可以使用Error.name属性获取以上错误类型。如下代码:
function captureErrorType(error) { switch (error.name) { case 'SyntaxError': alert("caught a " + error.name + ": " + error.message); //handle error… break; case 'EvalError': alert("caught a " + error.name + ": " + error.message); //handle error… break; case 'ReferenceError': alert("caught a " + error.name + ": " + error.message); //handle error… break; default: alert("caught a " + error.name + ": " + error.message); //handle all other error types here… break; } }
错误捕获
使用try/catch
try/catch只能针对特定的某个方法,不能捕获所有的异常。
OnError对象
IE的window对象有个全局事件onerror,它可以捕获脚本中任何未被try/catch处理的最后一个错误。
示例代码:
//记录所有错误
function reportError(err) {
var errMsg = [];
for (var p in err) {
if (err.hasOwnProperty(p)) {
errMsg.push(p + "=" + err[p]);
}
}
alert(errMsg.join("\n"));
} window.onerror = function (message, url, line) {
// 汇报错误
reportError({
message: message,
url: url,
line: line
});
}
function doSomething() { // error
a();
} try { doSomething();
} catch (e) { throw e; }
doSomething();
错误处理
客户端
在客户端捕获到错误信息可以:
1、 直接显示给用户
2、 作为日志输出
3、 使用ajax发送到服务器端
服务器端
服务器端接收到客户端回传过来的错误信息,可以
1、 作为日志输出
2、 存储到数据库,作为后续运维提供统计数据
3、 使用邮件,qq,微信,短信的形式发送给错误的干系人。
Error对象
在IE中使用try/catch可以获取的一个Error对象,这个对象有如下属性:
- name —— 异常对象名/类型
- message —— 错误提示信息
- description —— 和message属性相同
- number —— ErrorCode,错误代码
其中的number属性是一个整数,表示的是错误码,但这并不是真正的错误码,我们需要先将其做一下转换
var errCode = err.number& x0FFFF;
这得到真正的错误码,例如上述的-2146823279 转换之后就得到5009。有了这个错误码之后,我们可以到http://msdn.microsoft.com/en-us/library/1dk3k160(VS.85).aspx微软msdn上查找此错误码对应的。5009对应的错误是Undefined identifier。
错误码
错误有runtime error和syntax error两种。5开头的一般是runtime error,1开头的一般是syntax error。
运行时错误
|
|
语法错误
错误号 |
说明 |
1019 |
|
1020 |
|
1030 |
|
1027 |
|
1005 |
|
1006 |
|
1012 |
|
1003 |
|
1004 |
|
1032 |
|
1029 |
|
1007 |
|
1008 |
|
1009 |
|
1011 |
|
1033 |
|
1031 |
|
1023 |
|
1010 |
|
1028 |
|
1024 |
|
1014 |
|
1026 |
|
1025 |
|
1018 |
|
1002 |
|
1035 |
|
1016 |
|
1015 |
IE中JavaScript 的异常处理的更多相关文章
- javascript 之异常处理try catch finally--05
语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准,语法结构如下: try{ //可能会发生的错误代码 } catch(error){ //错误处 ...
- 浏览器中Javascript单线程分析
线程这个特性对于一门语言环境来说是尤其重要的,在Java/C++环境下都提供了多线程API操作. 但在Javascript中据说代码执行时单线程的,大量计算的逻辑会阻塞浏览器HTML渲染,但setTi ...
- JavaScript强化教程——Cocos2d-JS中JavaScript继承
javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...
- 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?
原文:在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样? <a href="javascript:alert(this.innerHTML ...
- Eclipse中javascript文件 clg 变为console.log();
Eclipse中javascript文件 clg 变为console.log(); window>preferance>JavaScript>Editor>Templates ...
- ASP.NET Core MVC 中设置全局异常处理方式
在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...
- asp.net中javascript与后台c#交互
asp.net中javascript与后台c#交互 作者:熊猫大叔 字体:[增加 减小] 类型:转载 时间:2015-10-23我要评论,出处:http://www.jb51.net/article/ ...
- Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...
- EBS OAF开发中的错误/异常处理(ErrorHandling) (转)
原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于 ...
随机推荐
- 瞧,这就是UE4 C++
1.虚幻中的类前缀你会见到U,A,F,以下就是很好的罗列其中的意义 U: UObject继承过来的,例如UTexture A: AActor继承过来的,例如AGameMode F: 其他的类和结构,例 ...
- 样式表中的 element.style样式如何修改
我们在写前面 web样式的时候,会发现有些时候,我们怎么修改 style里面的值,页面上的样式都不会修改,当你用工具查看时,会发现里面会有 element.style的值,这个值还找不到是在哪里出现的 ...
- STM32的I2C通信
I2C总线是由NXP(原PHILIPS)公司设计,有十分简洁的物理层定义,其特性如下: 只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL: 每个连接到总线的器件都可以通过唯一的地址和一直 ...
- Hibernate 查询语句
Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据 ...
- scp指令的学习
http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html scp是linux中功能最强大的文件传输命令,可以实现从本地到远程以及远程到 ...
- 在服务器端如何提取checkbox提交的数据?
HttpServeletRequest 单个字符串,getParameters() 多个字符串,getParametersValues(),返回一个数组,需要提前定义一个数组
- observer观察者模式
观察者模式(有时又被称为发布-订阅Subscribe>模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,让 ...
- unity3d vs2012
Unity3D自带的MonoDevelop编辑器无论是js还是c#代码提示都很差,很诡异的就是变量名和方法名有的时候提示有的时候不提示.不过用Visual Studio代替MonoDevelop这个问 ...
- js打印出对象的方法
var description = ""; for (var i in order) { var property = order[i]; description += i + & ...
- maven核心概念4
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...