javascript错误处理(1)
关键字: error exception
javascript 提供了两种特别的错误处理的方式.
BOM包含一个onerror事件处理函数,这在window和img对象上都有,同时,ECMAScript定义了另外一个从Java中借过来的try...catch...finally..结构,来处理异常.
1. onerror事件处理函数
BOM包含一个onerror事件处理函数,这在window和img对象上都有,同时,ECMAScript定义了另外一个从Java中借过来的try...catch...finally..结构,来处理异常.
1. onerror事件处理函数
onerror事件是在window对象触发的.
eg:
- <script type='text/javascrpt'>
- window.onerror=function(){
- alert('An error occurred');
- return true; //prevent the web browser's default action.
- }
- window.onload=function(){
- nonExistentFunction();
- }
- </script>
<script type='text/javascrpt'>
window.οnerrοr=function(){
alert('An error occurred');
return true; //prevent the web browser's default action.
}
window.οnlοad=function(){
nonExistentFunction();
}
</script>
onerror事件处理函数提供了三个参数
-
错误信息----对于给定错误,浏览器会显示同样的信息
-
URL----在哪个文件中发生了错误
-
行号----给定URL中发生错误的行号
eg:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <title>js error details</title>
- <link rel=stylesheet href="" />
- <style type="text/css">
- <!--
- -->
- </style>
- <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='nonExsitentFunction();'>
- </body>
- </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>js error details</title>
<link rel=stylesheet href="" />
<style type="text/css">
<!--
-->
</style>
<script type="text/javascript">
window.οnerrοr=function(sMessage, sUrl, sLine){
alert("An error occurred: /n"+sMessage+"/nURL: "+sUrl+"/nLine Number: "+sLine);
return true;
}
</script>
</head>
<body οnlοad='nonExsitentFunction();'>
</body>
</html>
图象载入错误.
eg:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <title>img load error</title>
- <link rel=stylesheet href="" />
- <style type="text/css">
- <!--
- -->
- </style>
- <script type="text/javascript">
- function handleLoad(){
- document.images[0].onerror = function(){
- alert("An error occurred loading the image.");
- }
- document.images[0].src='blue.gif';
- }
- </script>
- </head>
- <body onload='handleLoad();'>
- <p>The image below attempts to load a file that doesn't exist.</p>
- <img/>
- </body>
- </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>img load error</title>
<link rel=stylesheet href="" />
<style type="text/css">
<!--
-->
</style>
<script type="text/javascript">
function handleLoad(){
document.images[0].onerror = function(){
alert("An error occurred loading the image.");
}
document.images[0].src='blue.gif';
}
</script>
</head>
<body οnlοad='handleLoad();'>
<p>The image below attempts to load a file that doesn't exist.</p>
<img/>
</body>
</html>
注意: 与window对象的onerror事件处理函数不同, image的onerror事件处理函数没有任何关于额外信息的参数.
处理语法错误.
onerror不仅可以处理exception,它还能处理语法错误,也只有它才能处理.
Attention: 事件处理函数必须是页面中的第一个出现的代码:
eg:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <title>js error details</title>
- <link rel=stylesheet href="" />
- <style type="text/css">
- <!--
- -->
- </style>
- <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>
- </body>
- </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>js error details</title>
<link rel=stylesheet href="" />
<style type="text/css">
<!--
-->
</style>
<script type="text/javascript">
window.οnerrοr=function(sMessage, sUrl, sLine){
alert("An error occurred: /n"+sMessage+"/nURL: "+sUrl+"/nLine Number: "+sLine);
return true;
}
alert('syntax error.';
</script>
</head>
<body>
</body>
</html>
使用onerror事件处理函数的主要问题是,它是BOM的一部分,所以没有任何标准能控制它的行为.因此,不同的web browser使用这个事件处理函数处理错误方式有明显的不同. 例如, 在IE中发生error事件时, 正常代码会继续执行: 所有的变量和数据都保留下来, 并通过onerror事件处理函数访问.然后在Mozilla中,正常的代码执行都会结束,同时所有错误发生之前的变量和数据都被销毁. Safari和Konqueror 不支持window对象上的确onerror事件处理函数,但是他们支持图象上的onerror事件处理函数. |