javascript错误处理(转)
1.onerror事件处理函数
onerror事件处理函数是第一个用来协助javascript处理错误的机制。页面上出现异常时,error事件便在window对象上触发。
例如:
<html>
<head>
<title>OnError Example</title>
<script type="text/javascript">
window.onerror = function () {
alert("An error occurred.");
}
</script>
</head>
<body onload="nonExistentFunction()">
</body>
</html>
在这个例子中,尝试调用不存在的函数nonExistentFunction()时,就会引发一个异常。这时会弹出警告框显示“An error occurred.”不幸的是,浏览器的错误信息也显示出来了,要从浏览器中隐藏它,onerror事件处理函数必须返回true值:
如下
<html>
<head>
<title>OnError Example</title>
<script type="text/javascript">
window.onerror = function () {
alert("An error occurred.");
return true;
}
</script>
</head>
<body onload="nonExistentFunction()">
</body>
</html>
2.取出错误信息
onerror事件处理函数提供了三种信息来确定错误确切的性质:
错误信息--对于给定错误,浏览器会显示同样的信息。
URL--在哪个文件中发生了错误。
行号--给定的URL中发生错误的行号。
<html>
<head>
<title>OnError Example</title>
<script type="text/javascript">
window.onerror = function (sMessage, sUrl, sLine) {
alert("An error occurred:\n" + sMessage + "\nURL: " + sUrl + "\nLine Number: " + sLine);
return true;
}
</script>
</head>
<body onload="nonExistentFunction()">
</body>
</html>
3.图像载入错误
图像对象也支持onerror事件处理函数。当一个图像由于某种原因未能成功载入时(例如,文件不存在),error事件便在这个图像上触发。
<html>
<head>
<title>Image Error Test</title>
</head>
<body>
<p>The image below attempts to load a file that doesn't exist.</p>
<img src="blue.gif" onerror="alert('An error occurred loading the image.')" />
</body>
</html>
与window对象的onerror事件处理函数不同,image的onerror事件处理函数没有任务关于额外信息的参数。
4.处理语法错误
onerror事件处理函数不仅可以处理异常,它还能处理语法错误,也只有它才能处理。
<html>
<head>
<title>OnError Example</title>
<script type="text/javascript">
window.onerror = function (sMessage, sUrl, sLine) {
alert("An error occurred:\n" + sMessage + "\nURL: " + sUrl + "\nLine Number: " + sLine);
return true;
}
alert("Syntax error.";
</script>
</head>
<body onload="nonExistentFunction()">
<p>The syntax error on this page comes <em>after</em> the <code>onerror</code>
event handler is defined, so the custom dialog catches it.</p>
<p><strong>Note:</strong> This may not work in newer browsers with tighter security restrictions.</p>
</body>
</html>
注:使用onerror事件处理函数的主要问题是,它是BOM的一部分,所以,没有任何标准能控制它的行为。因此,不同的浏览器使用这个事件处理函数处理 错误的方式有明显的不同。例如,在IE中发生error事件时,正常的代码会继续执行:所有的变量和数据都保存下来,并可能过onerror事件处理函数 访问。然而在Mozilla中,正常的代码执行都会结束,同时所有错误发生之前的变量和数据都被销毁。Safari和Konqueror不支持 window对象上的onerror事件处理函数,但是它们支持图像上的onerror事件处理函数。
5.try...catch语句
<html>
<head>
<title>Try Catch Example</title>
<script type="text/javascript">
try {
window.nonExistentFunction();
alert("Method completed.");
} catch (exception) {
alert("An exception occurred.");
} finally {
alert("End of try...catch test.");
}
</script>
</head>
<body>
</body>
</html>
与java不同,ECMAScript标准在try...catch语句中指定只能有一个catch子句。因为javascript是弱类型,没办法指明 catch子句中的异常的特定类型。不管错误是什么类型,都由同一个catch子句处理。Mozilla对其进行了扩展,可为try...catch语句 添加多个catch子句。当然只有Mozilla才能使用这个形式,所以不推荐使用。
(1)嵌套try...catch语句
<html>
<head>
<title>Try Catch Example</title>
<script type="text/javascript">
try {
eval("a ++ b"); //causes error
} catch (oException) {
alert("An exception occurred.");
try {
var arrErrors = new Array(10000000000000000000000); //causes error
arrErrors.push(exception);
} catch (oException2) {
alert("Another exception occurred.");
}
} finally {
alert("All done.");
} </script>
</head>
<body>
</body>
</html>
(2)Error对象
Error对象有以下特性:
name--表示错误类型的字符串。
message--实际的错误信息。
Error对象的名称对象对应于它的类(因为Error只是一个基类),可以是以下值之一:
| 类 | 发生原因 |
| EvalError | 错误发生在eval()函数中 |
| RangeError | 数字的值超出javascript可表示的范围 |
| ReferenceError | 使用了非法的引用 |
| SyntaxError | 在eval()函数调用中发生了语法错误。其他的语法错误由浏览器报告,无法通过try...catch语句处理 |
| TypeError | 变量的类型不是预期所需的 |
| URIError | 在encodeURI()或者decodeURI()函数中发生了错误 |
Mozilla和IE都扩展了Erro对象以适应各自的需求。Mozilla提供一个fileName特性来表示错误发生在哪一个文件中,以及一个stack特性以包含到错误发生时的调用堆栈;IE提供了一个number特性来表示错误代号。
(3)判断错误类型
<html>
<head>
<title>Try Catch Example</title>
<script type="text/javascript">
try {
eval("a ++ b"); //causes SyntaxError
} catch (oException) {
if (oException.name == "SyntaxError") { //或者if(oException instanceof SyntaxError)
alert("Syntax Error: " + oException.message);
} else {
alert("An unexpected error occurred: " + oException.message);
}
} </script>
</head>
<body>
</body>
</html>
(4)抛出异常
ECMAScript第三版还引入了throw语句,用于有目的的抛出异常。语法如下:
throw error_object; //error_object可以是字符串、数字、布尔值或者是实际的对象。
<html>
<head>
<title>Try Catch Example</title>
<script type="text/javascript">
function addTwoNumbers(a, b) {
if (arguments.length < 2) {
throw new Error("Two numbers are required.");
} else {
return a + b;
}
} try {
result = addTwoNumbers(90);
} catch (oException) {
alert(oException.message); //outputs "Two numbers are required."
} </script>
</head>
<body>
</body>
</html>
因为浏览器不生成Error对象(它总是生成一个较精确的Error对象,比如RangeError),所以区分浏览器抛出的错误和开发人员抛出的错误很简单,使用前面的技术就行了:
try{
result = addTwoNumber(90,parseInt(z));
}catch(oException){
if(oException instanceof SyntaxError){
alert("Syntax Error: "+oException.message);
}else if(oException instanceof Error){
alert(oException.message);
}
}
注意检查instanceof Error必须是if语句中的最后一个条件,因为所有其他的错误类都继承于它(所以在检测instanceof Error时都返回true)。
所
有的浏览器都可以报告开发人员抛出的错误,但是错误消息的显示方式可能有所不同。IE6只会在抛出Error对象时,才显示错误信息;其他情况下,它就只
显示Exception thrown and not caught,而没有任何详细内容。Mozilla则会报告Error:uncaught
exception:然后调用所抛出的对象的toString()方法。
javascript错误处理(转)的更多相关文章
- JavaScript错误/异常处理
JavaScript Try...Catch 语句 介绍:JavaScript中的try...carch语句的作用和C#中的try...catch语句的作用一样, 都是捕获并处理异常. 语法: try ...
- Visual Studio 2013中因SignalR的Browser Link引起的Javascript错误一则
众所周知Visual Studio 2013中有一个由SignalR机制实现的Browser Link功能,意思是开发人员可以同时使用多个浏览器进行调试,当按下IDE中的Browser Link按钮后 ...
- 使用 Google Analytics 跟踪 JavaScript 错误
Google Analytics(谷歌分析)不仅仅是一个流量统计工具,你还可以用它来测量广告活动的有效性,跟踪用户多远到所需的页面流(从点击广告到购物车到结账页面)获取,并基于用户的信息设置浏览器和语 ...
- javascript错误处理与调试(转)
JavaScript 在错误处理调试上一直是它的软肋,如果脚本出错,给出的提示经常也让人摸不着头脑. ECMAScript 第 3 版为了解决这个问题引入了 try...catch 和 throw 语 ...
- JavaScript错误处理
JavaScript 错误 - Throw.Try 和 Catch JavaScript 测试和捕捉 try 语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代 ...
- 第一百二十三节,JavaScript错误处理与调试
JavaScript错误处理与调试 学习要点: 1.浏览器错误报告 2.错误处理 3.错误事件 4.错误处理策略 5.调试技术 6.调试工具 JavaScript在错误处理调试上一直是它的软肋,如果脚 ...
- 1000多个项目中的十大JavaScript错误以及如何避免
通过统计数据库中的1000多个项目,我们发现在 JavaScript 中最常出现的错误有10个.下面会向大家介绍这些错误发生的原因以及如何防止. 对于这些错误发生的次数,我们是通过收集的数据统计得出的 ...
- JavaScript 错误处理 Throw、Try 和 Catch
try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. JavaScript 错误 当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错 ...
- 【转】Javascript错误处理——try…catch
无论我们编程多么精通,脚本错误怎是难免.可能是我们的错误造成,或异常输入,错误的服务器端响应以及无数个其他原因. 通常,当发送错误时脚本会立刻停止,打印至控制台. 但try...catch语法结构可以 ...
- 【转】JavaScript 错误处理与调试——“错误处理”的注意要点
try-catch语句 该语句最适合处理那些我们无法控制的错误,在明明白白地知道自己的代码会发生错误时,再使用该语句就不太合适了. ECMA-262第3版引入了try-catch语句,基本的语法如下所 ...
随机推荐
- IdFTP中FEAT命令的问题
IdFTP控件很方便开发FTP客户端,用于传输文件.一次笔者的一个在阿里云的服务器突发故障,显示无法登陆FTP,而使用其他客户端(如FlashFxp)经过该项目设置,又可正常使用. 查询后说是FEAT ...
- SGU刷题之路,开始了
0. 关于SGU的简介 SGU的网址是:acm.sgu.ru 向不了解的同学介绍一下SGU这个题库: 1. 题目难度很高,题目大多很经典. 2. 其数据范围很小,时间和空间要求也都很小,同时很精确.甚 ...
- Android之线程安全的单例模式,Adapter注意事项之引用传值
线程安全的单例模式单位模式一般写法如下: public static FestivalLab mInstance; private FestivalLab() { } public static Fe ...
- 使用idea工具开发webservice
在idea开发工具中使用axis2插件创建集成webservice的web项目: 一.创建java项目 二.添加webservices支持 在红线框2处选择要使用的w ...
- POJ 3860 Fruit Weights(数学+最长路径 or 最短路径)
Description Have you ever thought about comparing the weight of fruits? That’s what you should do in ...
- winform自动最大化(在不同分辨率情况下)
load函数末尾加: System.Drawing.Rectangle rec = Screen.GetWorkingArea(this); int SH = rec.Height; int SW = ...
- Mac下离线安装SDK
背景 之前电脑上使用的是Android Studio,其sdk在Libarey下,最近需要在Eclipse下继续做之前的安卓项目,在配置sdk时eclipse自动选择了之前Android Studio ...
- PTA实验报告(循环 数组 函数)
一.循环PTA实验作业 题目一.7-2 求平方根序列前N项和 1.本题PTA提交列表 2.设计思路 本题调用了sqrt数学函数计算平方根,其次只用了一层循环,计算平方根之后使用循环累加计算总和sum. ...
- BZOJ4487 JSOI2015染色问题(组合数学+容斥原理)
逐个去除限制.第四个限制显然可以容斥,即染恰好c种颜色的方案数=染至多c种颜色的方案数-染至多c-1种颜色的方案数+染至多c-2种颜色的方案数…… 然后是限制二.同样可以容斥,即恰好选n行的方案数=至 ...
- hdu 1284 钱币兑换问题 (递推 || DP || 母函数)
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...