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) (版权声明,本人原创或者翻译的文章如需转载,如转载用于 ...
随机推荐
- MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...
- 6.Type and Member Basics
1.The Different Kinds of Type Members 1.Constants:a symbol that identifies a never-changing data val ...
- [SAP ABAP开发技术总结]字符串处理函数、正则表达式
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- NSKeyedArchive(存储自定义对象)
在viewController.m中: - (void)viewDidLoad { [super viewDidLoad]; ZWPerson *p = [[ZWPerson alloc] init] ...
- Android_相关路径
1. Android应用安装涉及到如下几个目录:system/app 系统自带的应用程序,无法删除.data/app 用户程序安装的目录,有删除权限.安装时把apk文件复制到此目录.da ...
- 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题
方法一: html: <div id="all1"> <div id="left1">1</div> <div id= ...
- (一)linux常见命令
一.chmod 修改文件权限 每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读.写和执行权限:与属主同组的用户的读.写和执行权限:系统中其他用户的读.写和执行权限.横线代表空许可. ...
- NSString / NSData / char* 类型之间的转换
转自网络: NSString / NSData / char* 类型之间的转换 1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; ch ...
- C++——并发编程
一.高级接口:async()和Future 1.1 async()和Future的第一个用例 假设需要计算两个操作数的总和,而这两个操作数是两个函数的返回值.寻常加法如下: func1() + fun ...
- spring 配置触发器
原转发的博文 http://blog.csdn.net/liaq325/article/details/8269439 在Spring中配置Quartz 前面介绍过了Timer在Spring中的实现, ...