日期:2014-05-16  浏览次数:20343 次

javascript错误处理(1)
javascript 提供了两种特别的错误处理的方式.
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>

?

?

onerror事件处理函数提供了三个参数

  1. 错误信息----对于给定错误,浏览器会显示同样的信息
  2. URL----在哪个文件中发生了错误
  3. 行号----给定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>

图象载入错误.

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>

?

注意: 与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>

使用onerror事件处理函数的主要问题是,它是BOM的一部分,所以没有任何标准能控制它的行为.因此,不同的web browser使用这个事件处理函数处理错误方式有明显的不同. 例如, 在IE中发生error事件时, 正常代码会继续执行: 所有的变量和数据都保留下来, 并通过onerror事件处理函数访问.然后在Mozilla中,正常的代码执行都会结束,同时所有错误发生之前的变量和数据都被销毁.

Safari和Konqueror 不支持window对象上的确onerror事件处理函数,但是他们支持图象上的onerror事件处理函数.

?

(选自JavaScript高级程序设计? 待续)