﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-记忆好很大程度决定能力!-文章分类-JavaScript</title><link>http://www.blogjava.net/microlab4321/category/24886.html</link><description>适时总结是一种很好的彌补方法!</description><language>zh-cn</language><lastBuildDate>Fri, 07 Sep 2007 20:24:55 GMT</lastBuildDate><pubDate>Fri, 07 Sep 2007 20:24:55 GMT</pubDate><ttl>60</ttl><item><title>(转)Javascript中最常用的55个经典技巧 </title><link>http://www.blogjava.net/microlab4321/articles/142551.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Tue, 04 Sep 2007 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/142551.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/142551.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/142551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/142551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/142551.html</trackback:ping><description><![CDATA[<p>1<span>. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<br />
&lt;table border oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt; 可用于Table</span></p>
<span>
<p>2. &lt;body onselectstart="return false"&gt; 取消选取、防止复制</p>
<p>3. onpaste="return false" 不准粘贴</p>
<p>4. oncopy="return false;" oncut="return false;" 防止复制</p>
<p>5. &lt;link rel="Shortcut Icon" href="favicon.ico"&gt; IE地址栏前换成自己的图标</p>
<p>6. &lt;link rel="Bookmark" href="favicon.ico"&gt; 可以在收藏夹中显示出你的图标</p>
<p><br />
7. &lt;input style="ime-mode:disabled"&gt; 关闭输入法</p>
<p><br />
8. 永远都会带着框架<br />
&lt;script language="JavaScript"&gt;&lt;!--<br />
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页<br />
// --&gt;&lt;/script&gt;</p>
<p><br />
9. 防止被人frame<br />
&lt;SCRIPT LANGUAGE=JAVASCRIPT&gt;&lt;!-- <br />
if (top.location != self.location)top.location=self.location;<br />
// --&gt;&lt;/SCRIPT&gt;</p>
<p><br />
10. 网页将不能被另存为<br />
&lt;noscript&gt;&lt;*** src="/*.html&gt;";&lt;/***&gt;&lt;/noscript&gt; </p>
<p><br />
11. &lt;input type=button value="/查看网页源代码 <br />
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn""&gt;<br />
12.删除时确认<br />
&lt;a href=""javascript :if(confirm("确实要删除吗?"))location="boos.asp?&amp;areyou=删除&amp;page=1""&gt;删除&lt;/a&gt; </p>
<p><br />
13. 取得控件的绝对位置<br />
//Javascript<br />
&lt;script language="Javascript"&gt;<br />
function getIE(e){<br />
var t=e.offsetTop;<br />
var l=e.offsetLeft;<br />
while(e=e.offsetParent){<br />
t+=e.offsetTop;<br />
l+=e.offsetLeft;<br />
}<br />
alert("top="+t+"/nleft="+l);<br />
}<br />
&lt;/script&gt;<br />
//VBScript<br />
&lt;script language="VBScript"&gt;&lt;!--<br />
function getIE()<br />
dim t,l,a,b<br />
set a=document.all.img1<br />
t=document.all.img1.offsetTop<br />
l=document.all.img1.offsetLeft<br />
while a.tagName&lt;&gt;"BODY"<br />
set a = a.offsetParent<br />
t=t+a.offsetTop<br />
l=l+a.offsetLeft<br />
wend<br />
msgbox "top="&amp;t&amp;chr(13)&amp;"left="&amp;l,64,"得到控件的位置"<br />
end function<br />
--&gt;&lt;/script&gt;</p>
<p><br />
14. 光标是停在文本框文字的最后<br />
&lt;script language="javascript"&gt;<br />
function cc()<br />
{<br />
var e = event.srcElement;<br />
var r =e.createTextRange();<br />
r.moveStart("character",e.value.length);<br />
r.collapse(true);<br />
r.select();<br />
}<br />
&lt;/script&gt;<br />
&lt;input type=text name=text1 value="123" onfocus="cc()"&gt;</p>
<p><br />
15. 判断上一页的来源<br />
javascript :<br />
document.referrer</p>
<p><br />
16. 最小化、最大化、关闭窗口<br />
&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt; <br />
&lt;param name="Command" value="Minimize"&gt;&lt;/object&gt;<br />
&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt; <br />
&lt;param name="Command" value="Maximize"&gt;&lt;/object&gt;<br />
&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt;<br />
&lt;PARAM NAME="Command" value="/Close"&gt;&lt;/OBJECT&gt;<br />
&lt;input type=button value="/最小化 onclick=hh1.Click()&gt;<br />
&lt;input type=button value="/blog/最大化 onclick=hh2.Click()&gt;<br />
&lt;input type=button value=关闭 onclick=hh3.Click()&gt;<br />
本例适用于IE</p>
<p><br />
17.屏蔽功能键Shift,Alt,Ctrl<br />
&lt;script&gt;<br />
function look(){ <br />
if(event.shiftKey) <br />
alert("禁止按Shift键!"); //可以换成ALT　CTRL<br />
} <br />
document.onkeydown=look; <br />
&lt;/script&gt;</p>
<p><br />
18. 网页不会被缓存<br />
&lt;META HTTP-EQUIV="pragma" CONTENT="no-cache"&gt;<br />
&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"&gt;<br />
&lt;META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"&gt;<br />
或者&lt;META HTTP-EQUIV="expires" CONTENT="0"&gt;</p>
<p><br />
19.怎样让表单没有凹凸感？<br />
&lt;input type=text style="""border:1 solid #000000"&gt; <br />
或<br />
&lt;input type=text style="border-left:none; border-right:none; border-top:none; border-bottom: <br />
1 solid #000000"&gt;&lt;/textarea&gt;</p>
<p><br />
20.&lt;div&gt;&lt;span&gt;&amp;&lt;layer&gt;的区别？ <br />
&lt;div&gt;(division)用来定义大段的页面元素，会产生转行 <br />
&lt;span&gt;用来定义同一行内的元素，跟&lt;div&gt;的唯一区别是不产生转行 <br />
&lt;layer&gt;是ns的标记，ie不支持，相当于&lt;div&gt;</p>
<p><br />
21.让弹出窗口总是在最上面:<br />
&lt;body onblur="this.focus();"&gt;</p>
<p><br />
22.不要滚动条? <br />
让竖条没有: <br />
&lt;body style="overflow:scroll;overflow-y:hidden"&gt; <br />
&lt;/body&gt; <br />
让横条没有: <br />
&lt;body style="overflow:scroll;overflow-x:hidden"&gt; <br />
&lt;/body&gt; <br />
两个都去掉？更简单了 <br />
&lt;body scroll="no"&gt; <br />
&lt;/body&gt; </p>
<p><br />
23.怎样去掉图片链接点击后，图片周围的虚线？<br />
&lt;a href="#" onFocus="this.blur()"&gt;&lt;img src="/logo.jpg" border=0&gt;&lt;/a&gt;</p>
<p><br />
24.电子邮件处理提交表单<br />
&lt;form name="form1" method="post" action=<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#42;&#42;&#42;&#64;&#42;&#42;&#42;&#46;&#99;&#111;&#109;">mailto:****@***.com</a> <br />
enctype="text/plain"&gt; <br />
&lt;input type=submit&gt;<br />
&lt;/form&gt;</p>
<p><br />
25.在打开的子窗口刷新父窗口的代码里如何写？<br />
window.opener.location.reload()</p>
<p><br />
26.如何设定打开页面的大小<br />
&lt;body onload="top.resizeTo(300,200);"&gt;<br />
打开页面的位置&lt;body onload="top.moveBy(300,200);"&gt;</p>
<p><br />
27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动 <br />
&lt;STYLE&gt; <br />
body <br />
{background-image:url(/logo.gif); background-repeat:no-repeat; <br />
background-position:center;background-attachment: fixed} <br />
&lt;/STYLE&gt; </p>
<p><br />
28. 检查一段字符串是否全由数字组成<br />
&lt;script language="Javascript"&gt;&lt;!--<br />
function checkNum(str){return str.match(//D/)==null}<br />
alert(checkNum("1232142141"))<br />
alert(checkNum("123214214a1"))<br />
// --&gt;&lt;/script&gt;</p>
<p><br />
29. 获得一个窗口的大小<br />
document.body.clientWidth; document.body.clientHeight</p>
<p><br />
30. 怎么判断是否是字符<br />
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");<br />
else alert("全是字符");</p>
<p><br />
31.TEXTAREA自适应文字行数的多少<br />
&lt;textarea rows=1 name=s1 cols=27 onpropertychange<br />
="this.style.posHeight=this.scrollHeight"&gt;<br />
&lt;/textarea&gt;</p>
<p><br />
32. 日期减去天数等于第二个日期<br />
&lt;script language=Javascript&gt;<br />
function cc(dd,dadd)<br />
{<br />
//可以加上错误处理<br />
var a = new Date(dd)<br />
a = a.valueOf()<br />
a = a - dadd * 24 * 60 * 60 * 1000<br />
a = new Date(a)<br />
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")<br />
}<br />
cc("12/23/2002",2)<br />
&lt;/script&gt;</p>
<p><br />
33. 选择了哪一个Radio<br />
&lt;HTML&gt;&lt;script language="vbscript"&gt;<br />
function checkme()<br />
for each ob in radio1<br />
if ob.checked then <br />
window.alert ob.value<br />
next<br />
end function<br />
&lt;/script&gt;&lt;BODY&gt;<br />
&lt;INPUT name="radio1" type="radio" value="/style" checked&gt;Style<br />
&lt;INPUT name="radio1" type="radio" value="/blog/barcode"&gt;Barcode<br />
&lt;INPUT type="button" value="check" onclick="checkme()"&gt;<br />
&lt;/BODY&gt;&lt;/HTML&gt;</p>
<p><br />
34.脚本永不出错<br />
&lt;SCRIPT LANGUAGE="JavaScript"&gt; <br />
&lt;!-- Hide <br />
function killErrors() { <br />
return true; <br />
} <br />
window.onerror = killErrors; <br />
// --&gt; <br />
&lt;/SCRIPT&gt;</p>
<p><br />
35.ENTER键可以让光标移到下一个输入框<br />
&lt;input onkeydown="if(event.keyCode==13)event.keyCode=9"&gt;</p>
<p><br />
36. 检测某个网站的链接速度：<br />
把如下代码加入&lt;body&gt;区域中:<br />
&lt;script language=Javascript&gt;<br />
tim=1<br />
setInterval("tim++",100)<br />
b=1<br />
var autourl=new Array()<br />
autourl[1]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0&gt;<a href="http://www.njcatv.net/" target="_blank">www.njcatv.net</a>"<br />
autourl[2]="javacool.3322.net"<br />
autourl[3]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0&gt;<a href="http://www.sina.com.cn/" target="_blank">www.sina.com.cn</a>"<br />
autourl[4]="www.nuaa.edu.cn"<br />
autourl[5]=1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0&gt;<a href="http://www.cctv.com/" target="_blank">www.cctv.com</a>"<br />
function butt(){<br />
***("&lt;form name=autof&gt;")<br />
for(var i=1;i&lt;autourl.length;i++)<br />
***("&lt;input type=text name=txt"+i+" size=10 value="/测试中&#8230;&#8230;&gt; =》&lt;input type=text <br />
name=url"+i+" size=40&gt; =》&lt;input type=button value="/blog/GO <br />
onclick=window.open(this.form.url"+i+".value)&gt;&lt;br&gt;")<br />
***("&lt;input type=submit value=刷新&gt;&lt;/form&gt;")<br />
}<br />
butt()<br />
function auto(url){<br />
document.forms[0]["url"+b].value=url<br />
if(tim&gt;200)<br />
{document.forms[0]["txt"+b].value="/链接超时"}<br />
else<br />
{document.forms[0]["txt"+b].value="/blog/时间"+tim/10+"秒"}<br />
b++<br />
}<br />
function run(){for(var i=1;i&lt;autourl.length;i++)***("&lt;img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 <br />
onerror=auto("http://"+autourl+"")&gt;")}<br />
run()&lt;/script&gt;</p>
<p><br />
37. 各种样式的光标<br />
auto ：标准光标<br />
default ：标准箭头<br />
hand ：手形光标<br />
wait ：等待光标<br />
text ：I形光标<br />
vertical-text ：水平I形光标<br />
no-drop ：不可拖动光标<br />
not-allowed ：无效光标<br />
help ：?帮助光标<br />
all-scroll ：三角方向标<br />
move ：移动标<br />
crosshair ：十字标<br />
e-resize<br />
n-resize<br />
nw-resize<br />
w-resize<br />
s-resize<br />
se-resize<br />
sw-resize</p>
<p><br />
38.页面进入和退出的特效<br />
进入页面&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"&gt;<br />
推出页面&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"&gt;&nbsp;&nbsp;<br />
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为1-23:<br />
　　0 矩形缩小 <br />
　　1 矩形扩大 <br />
　　2 圆形缩小<br />
　　3 圆形扩大 <br />
　　4 下到上刷新 <br />
　　5 上到下刷新<br />
　　6 左到右刷新 <br />
　　7 右到左刷新 <br />
　　8 竖百叶窗<br />
　　9 横百叶窗 <br />
　　10 错位横百叶窗 <br />
　　11 错位竖百叶窗<br />
　　12 点扩散 <br />
　　13 左右到中间刷新 <br />
　　14 中间到左右刷新<br />
　　15 中间到上下<br />
　　16 上下到中间 <br />
　　17 右下到左上<br />
　　18 右上到左下 <br />
　　19 左上到右下 <br />
　　20 左下到右上<br />
　　21 横条 <br />
　　22 竖条 <br />
　　23 以上22种随机选择一种</p>
<p><br />
39.在规定时间内跳转<br />
&lt;META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com"&gt; </p>
<p><br />
40.网页是否被检索<br />
&lt;meta name="ROBOTS" content="属性值"&gt;<br />
　　其中属性值有以下一些:<br />
　　属性值为"all": 文件将被检索，且页上链接可被查询；<br />
　　属性值为"none": 文件不被检索，而且不查询页上的链接；<br />
　　属性值为"index": 文件将被检索；<br />
　　属性值为"follow": 查询页上的链接；<br />
　　属性值为"noindex": 文件不检索，但可被查询链接；<br />
　　属性值为"nofollow": 文件不被检索，但可查询页上的链接。</p>
<p><br />
41、email地址的分割<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;a href="mailto:webmaster@sina.com"&gt;webmaster@sina.com&lt;/a&gt;</p>
<p><br />
42、流动边框效果的表格<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;SCRIPT&gt;<br />
l=Array(6,7,8,9,'a','b','b','c','d','e','f')<br />
Nx=5;Ny=35<br />
t="&lt;table border=0 cellspacing=0 cellpadding=0 height="+((Nx+2)*16)+"&gt;&lt;tr&gt;"<br />
for(x=Nx;x&lt;Nx+Ny;x++)<br />
t+="&lt;td width=16 id=a_mo"+x+"&gt;　&lt;/td&gt;"<br />
t+="&lt;/tr&gt;&lt;tr&gt;&lt;td width=10 id=a_mo"+(Nx-1)+"&gt;　&lt;/td&gt;&lt;td colspan="+(Ny-2)+" rowspan="+(Nx)+"&gt;　&lt;/td&gt;&lt;td width=16 id=a_mo"+(Nx+Ny)+"&gt;&lt;/td&gt;&lt;/tr&gt;"<br />
for(x=2;x&lt;=Nx;x++)<br />
t+="&lt;tr&gt;&lt;td width=16 id=a_mo"+(Nx-x)+"&gt;　&lt;/td&gt;&lt;td width=16 id=a_mo"+(Ny+Nx+x-1)+"&gt;　&lt;/td&gt;&lt;/tr&gt;"<br />
t+="&lt;tr&gt;"<br />
for(x=Ny;x&gt;0;x--)<br />
t+="&lt;td width=16 id=a_mo"+(x+Nx*2+Ny-1)+"&gt;　&lt;/td&gt;"<br />
***(t+"&lt;/tr&gt;&lt;/table&gt;")<br />
var N=Nx*2+Ny*2<br />
function f1(y){<br />
for(i=0;i&lt;N;i++){<br />
c=(i+y)%20;if(c&gt;10)c=20-c<br />
document.all["a_mo"+(i)].bgColor=""""#0000"+l[c]+l[c]+"'"}<br />
y++<br />
setTimeout('f1('+y+')','1')}<br />
f1(1)<br />
&lt;/SCRIPT&gt;</p>
<p><br />
43、JavaScript主页弹出窗口技巧<br />
窗口中间弹出<br />
&lt;script&gt;<br />
window.open("http://www.cctv.com","","width=400,height=240,top="+(screen.availHeight-240)/2+",left="+(screen.availWidth-400)/2);<br />
&lt;/script&gt;<br />
============<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script language="LiveScript"&gt;<br />
function WinOpen() {<br />
&nbsp;&nbsp;&nbsp; msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");<br />
&nbsp;&nbsp;&nbsp; msg.***("&lt;HEAD&gt;&lt;TITLE&gt;哈 罗!&lt;/TITLE&gt;&lt;/HEAD&gt;");<br />
&nbsp;&nbsp;&nbsp; msg.***("&lt;CENTER&gt;&lt;H1&gt;酷 毙 了!&lt;/H1&gt;&lt;h2&gt;这 是&lt;B&gt;JavaScript&lt;/B&gt;所 开 的 视 窗!&lt;/h2&gt;&lt;/CENTER&gt;");<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;form&gt;<br />
&lt;input type="button" name="Button1" value="Push me" onclick="WinOpen()"&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
==============<br />
一、在下面的代码中，你只要单击打开一个窗口，即可链接到赛迪网。而当你想关闭时，只要单击一下即可关闭刚才打开的窗口。<br />
　　代码如下： <br />
　　&lt;SCRIPT language="JavaScript"&gt; <br />
　　&lt;！-- <br />
　　function openclk() { <br />
　　another=open('1000){this.resized=true;this.style.width=1000;}" align=absMiddle border=0&gt;<a href="http://www.ccidnet.com%20/" target="_blank">http://www.ccidnet.com'</a>，'NewWindow'); <br />
　　} <br />
　　function closeclk() { <br />
　　another.close(); <br />
　　} <br />
　　//--&gt; <br />
　　&lt;/SCRIPT&gt; <br />
　　&lt;FORM&gt; <br />
　　&lt;INPUT TYPE="BUTTON" NAME="open" value="/打开一个窗口" onClick="openclk()"&gt; <br />
　　&lt;BR&gt; <br />
　　&lt;INPUT TYPE="BUTTON" NAME="close" value="/blog/关闭这个窗口" onClick="closeclk()"&gt; <br />
　　&lt;/FORM&gt; <br />
　　二、上面的代码也太静了，为何不来点动感呢？如果能给页面来个降落效果那该多好啊！ <br />
　　代码如下： <br />
　　&lt;script&gt; <br />
　　function drop(n) { <br />
　　if(self.moveBy){ <br />
　　self.moveBy (0，-900); <br />
　　for(i = n; i &gt; 0; i--){ <br />
　　self.moveBy(0，3); <br />
　　} <br />
　　for(j = 8; j &gt; 0; j--){ <br />
　　self.moveBy(0，j); <br />
　　self.moveBy(j，0); <br />
　　self.moveBy(0，-j); <br />
　　self.moveBy(-j，0); <br />
　　} <br />
　　} <br />
　　} <br />
　　&lt;/script&gt; <br />
　　&lt;body onLoad="drop(300)"&gt; <br />
　　三、讨厌很多网站总是按照默认窗口打开，如果你能随心所欲控制打开的窗口那该多好。 <br />
　　代码如下: <br />
　　&lt;SCRIPT LANGUAGE="JavaScript"&gt; <br />
　　&lt;！-- Begin <br />
　　function popupPage(l， t， w， h) { <br />
　　var windowprops = "location=no，scrollbars=no，menubars=no，toolbars=no，resizable=yes" + <br />
　　"，left=" + l + "，top=" + t + "，width=" + w + "，height=" + h; <br />
　　var URL = "http://www.80cn.com"; <br />
　　popup = window.open(URL，"MenuPopup"，windowprops); <br />
　　} <br />
　　// End --&gt; <br />
　　&lt;/script&gt; <br />
　　&lt;table&gt; <br />
　　&lt;tr&gt; <br />
　　&lt;td&gt; <br />
　　&lt;form name=popupform&gt; <br />
　　&lt;pre&gt; <br />
　　打开页面的参数&lt;br&gt; <br />
　　离开左边的距离: &lt;input type=text name=left size=2 maxlength=4&gt; pixels <br />
　　离开右边的距离: &lt;input type=text name=top size=2 maxlength=4&gt; pixels <br />
　　窗口的宽度: &lt;input type=text name=width size=2 maxlength=4&gt; pixels <br />
　　窗口的高度: &lt;input type=text name=height size=2 maxlength=4&gt; pixels <br />
　　&lt;/pre&gt; <br />
　　&lt;center&gt; <br />
　　&lt;input type=button value="打开这个窗口！" onClick="popupPage(this.form.left.value， this.form.top.value， this.form.width.value，<br />
this.form.height.value)"&gt; <br />
　　&lt;/center&gt; <br />
　　&lt;/form&gt; <br />
　　&lt;/td&gt; <br />
　　&lt;/tr&gt; <br />
　　&lt;/table&gt;你只要在相对应的对话框中输入一个数值即可，将要打开的页面的窗口控制得很好。 </p>
<p><br />
44、页面的打开移动<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />
&lt;!-- Begin<br />
for (t = 2; t &gt; 0; t--) {<br />
for (x = 20; x &gt; 0; x--) {<br />
for (y = 10; y &gt; 0; y--) {<br />
parent.moveBy(0,-x);<br />
&nbsp;&nbsp; }<br />
}<br />
for (x = 20; x &gt; 0; x--) {<br />
for (y = 10; y &gt; 0; y--) {<br />
parent.moveBy(0,x);<br />
&nbsp;&nbsp; }<br />
}<br />
for (x = 20; x &gt; 0; x--) {<br />
for (y = 10; y &gt; 0; y--) {<br />
parent.moveBy(x,0);<br />
&nbsp;&nbsp; }<br />
}<br />
for (x = 20; x &gt; 0; x--) {<br />
for (y = 10; y &gt; 0; y--) {<br />
parent.moveBy(-x,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; } <br />
}<br />
//--&gt;<br />
//&nbsp;&nbsp; End --&gt;<br />
&lt;/script&gt;</p>
<p><br />
45、显示个人客户端机器的日期和时间<br />
&lt;script language="LiveScript"&gt;<br />
&lt;!-- Hiding<br />
&nbsp;&nbsp; today = new Date()<br />
&nbsp;&nbsp; ***("现 在 时 间 是： ",today.getHours(),":",today.getMinutes())<br />
&nbsp;&nbsp; ***("&lt;br&gt;今 天 日 期 为： ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());<br />
// end hiding contents --&gt;<br />
&lt;/script&gt;</p>
<p><br />
46、自动的为你每次产生最後修改的日期了： <br />
&lt;html&gt;<br />
&lt;body&gt;<br />
This is a simple HTML- page.<br />
&lt;br&gt;<br />
Last changes:<br />
&nbsp;&nbsp; &lt;script language="LiveScript"&gt;<br />
&nbsp;&nbsp; &lt;!--&nbsp;&nbsp; hide script from old browsers<br />
&nbsp;&nbsp;&nbsp;&nbsp; ***(document.lastModified)<br />
&nbsp;&nbsp; // end hiding contents --&gt;<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><br />
47、不能为空和邮件地址的约束：<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script language="JavaScript"&gt;<br />
&lt;!-- Hide<br />
function test1(form) {<br />
&nbsp;&nbsp; if (form.text1.value == "")<br />
&nbsp;&nbsp;&nbsp;&nbsp; alert("您 没 写 上 任 何 东 西， 请 再 输 入 一 次 !")<br />
&nbsp;&nbsp; else { <br />
&nbsp;&nbsp;&nbsp; alert("嗨 "+form.text1.value+"! 您 已 输 入 完 成 !");<br />
&nbsp;&nbsp; }<br />
}<br />
function test2(form) {<br />
&nbsp;&nbsp; if (form.text2.value == "" || <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form.text2.value.indexOf('@', 0) == -1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("这 不 是 正 确 的 e-mail address! 请 再 输 入 一 次 !");<br />
&nbsp;&nbsp; else alert("您 已 输 入 完 成 !");<br />
}<br />
// --&gt;<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;form name="first"&gt;<br />
Enter your name:&lt;br&gt;<br />
&lt;input type="text" name="text1"&gt;<br />
&lt;input type="button" name="button1" value="输 入 测 试" onClick="test1(this.form)"&gt;<br />
&lt;P&gt;<br />
Enter your e-mail address:&lt;br&gt;<br />
&lt;input type="text" name="text2"&gt;<br />
&lt;input type="button" name="button2" value="输 入 测 试" onClick="test2(this.form)"&gt;<br />
&lt;/body&gt;</p>
<p><br />
48、跑马灯<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script language="JavaScript"&gt;<br />
&lt;!-- Hide<br />
var scrtxt="怎麽样 ! 很酷吧 ! 您也可以试试."+"Here goes your message the visitors to your <br />
page will "+"look at for hours in pure fascination...";<br />
var lentxt=scrtxt.length;<br />
var width=100;<br />
var pos=1-width;<br />
function scroll() {<br />
&nbsp;&nbsp; pos++;<br />
&nbsp;&nbsp; var scroller="";<br />
&nbsp;&nbsp; if (pos==lentxt) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; pos=1-width;<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; if (pos&lt;0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; for (var i=1; i&lt;=Math.abs(pos); i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scroller=scroller+" ";}<br />
&nbsp;&nbsp;&nbsp;&nbsp; scroller=scroller+scrtxt.substring(0,width-i+1);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp; scroller=scroller+scrtxt.substring(pos,width+pos);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; window.status = scroller;<br />
&nbsp;&nbsp; setTimeout("scroll()",150);<br />
&nbsp;&nbsp; }<br />
//--&gt;<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body onLoad="scroll();return true;"&gt;<br />
这里可显示您的网页 !<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><br />
49、在网页中用按钮来控制前页，后页和主页的显示。<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;FORM NAME="buttonbar"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;INPUT TYPE="button" VALUE="Back" onClick="history.back()"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;INPUT TYPE="button" VALUE="JS- Home" onClick="location='script.html'"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;INPUT TYPE="button" VALUE="Next" onCLick="history.forward()"&gt;<br />
&lt;/FORM&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
50、查看某网址的源代码<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;SCRIPT&gt;<br />
function add()<br />
{<br />
var ress=document.forms[0].luxiaoqing.value<br />
window.location="view-source:"+ress;<br />
}<br />
&lt;/SCRIPT&gt;<br />
输入要查看源代码的URL地址:<br />
&lt;FORM&gt;&lt;input type="text" name="luxiaoqing" size=40 value="http://"&gt;&lt;/FORM&gt;<br />
&lt;FORM&gt;&lt;br&gt;<br />
&lt;INPUT type="button" value="查看源代码" onClick=add()&gt;<br />
&lt;/FORM&gt;</p>
<p><br />
51、title显示日期<br />
把如下代码加入&lt;body&gt;区域中:<br />
&lt;script language="JavaScript1.2"&gt;<br />
&lt;!--hide<br />
var isnMonth = new<br />
Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");<br />
var isnDay = new<br />
Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日");<br />
today = new Date () ;<br />
Year=today.getYear();<br />
Date=today.getDate();<br />
if (document.all)<br />
document.title="今天是: "+Year+"年"+isnMonth[today.getMonth()]+Date+"日"+isnDay[today.getDay()]<br />
//--hide--&gt;<br />
&lt;/script&gt;</p>
<p><br />
52、显示所有链接<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;script language="JavaScript1.2"&gt;<br />
&lt;!--<br />
function extractlinks(){<br />
var links=document.all.tags("A")<br />
var total=links.length<br />
var win2=window.open("","","menubar,scrollbars,toolbar")<br />
win2.***("&lt;font size='2'&gt;一共有"+total+"个连接&lt;/font&gt;&lt;br&gt;")<br />
for (i=0;i&lt;total;i++){<br />
win2.***("&lt;font size='2'&gt;"+links[i].outerHTML+"&lt;/font&gt;&lt;br&gt;")<br />
}<br />
}<br />
//--&gt;<br />
&lt;/script&gt;<br />
&lt;input type="button" onClick="extractlinks()" value="显示所有的连接"&gt;</p>
<p><br />
53、回车键换行<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;script type="text/javascript"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
function handleEnter (field, event) {<br />
&nbsp;&nbsp; var keyCode = event.keyCode ? event.keyCode : event.which ?<br />
event.which : event.charCode;<br />
&nbsp;&nbsp; if (keyCode == 13) {<br />
&nbsp;&nbsp;&nbsp; var i;<br />
&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; field.form.elements.length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (field == field.form.elements[i])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; i = (i + 1) % field.form.elements.length;<br />
&nbsp;&nbsp;&nbsp; field.form.elements[i].focus();<br />
&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; else<br />
&nbsp;&nbsp; return true;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&lt;/script&gt;<br />
&lt;form&gt;<br />
&lt;input type="text" onkeypress="return handleEnter(this, event)"&gt;&lt;br&gt;<br />
&lt;input type="text" onkeypress="return handleEnter(this, event)"&gt;&lt;br&gt;<br />
&lt;textarea&gt;回车换行</p>
<p><br />
54、确认后提交<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br />
&lt;!--<br />
function msg(){<br />
if (confirm("你确认要提交嘛！"))<br />
document.lnman.submit()<br />
}<br />
//--&gt;<br />
&lt;/SCRIPT&gt;<br />
&lt;form name="lnman" method="post" action=""&gt;<br />
&nbsp;&nbsp; &lt;p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="text" name="textfield" value="确认后提交"&gt;<br />
&nbsp;&nbsp; &lt;/p&gt;<br />
&nbsp;&nbsp; &lt;p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="button" name="Submit" value="提交" onclick="msg();"&gt;<br />
&nbsp;&nbsp; &lt;/p&gt;<br />
&lt;/form&gt;</p>
<p><br />
55、改变表格的内容<br />
把如下代码加入&lt;body&gt;区域中<br />
&lt;script ***script&gt;<br />
var arr=new Array()<br />
arr[0]="一一一一一";<br />
arr[1]="二二二二二";<br />
arr[2]="三三三三三";<br />
&lt;/script&gt;<br />
&lt;select onchange="zz.cells[this.selectedIndex].innerHTML=arr[this.selectedIndex]"&gt;<br />
&nbsp;&nbsp; &lt;option value=a&gt;改变第一格&lt;/option&gt;<br />
&nbsp;&nbsp; &lt;option value=a&gt;改变第二格&lt;/option&gt;<br />
&nbsp;&nbsp; &lt;option value=a&gt;改变第三格&lt;/option&gt;<br />
&lt;/select&gt;<br />
&lt;table id=zz border=1&gt;<br />
&nbsp;&nbsp; &lt;tr height=20&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width=150&gt;第一格&lt;/td&gt;<br />
&lt;td width=150&gt;第二格&lt;/td&gt;<br />
&lt;td width=150&gt;第三格&lt;/td&gt;<br />
&nbsp;&nbsp; &lt;/tr&gt;<br />
&lt;/table&gt;</p>
</span>
<img src ="http://www.blogjava.net/microlab4321/aggbug/142551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-09-04 11:06 <a href="http://www.blogjava.net/microlab4321/articles/142551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入理解JavaScript中的函数 </title><link>http://www.blogjava.net/microlab4321/articles/138177.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 20 Aug 2007 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/138177.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/138177.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/138177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/138177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/138177.html</trackback:ping><description><![CDATA[<p>函数是进行模块化程序设计的基础，编写复杂的Ajax应用程序，必须对函数有更深入的了解。JavaScript中的函数不同于其他的语言，每个函数都是作为一个对象被维护和运行的。通过函数对象的性质，可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。在继续讲述之前，先看一下函数的使用语法：</p>
<p>function func1(&#8230;){&#8230;}<br>var func2=function(&#8230;){&#8230;};<br>var func3=function func4(&#8230;){&#8230;};<br>var func5=new Function();<br>　　这些都是声明函数的正确语法。它们和其他语言中常见的函数或之前介绍的函数定义方式有着很大的区别。那么在JavaScript中为什么能这么写？它所遵循的语法是什么呢？下面将介绍这些内容。</p>
<p>　　认识函数对象（Function Object）</p>
<p>　　可以用function关键字定义一个函数，并为每个函数指定一个函数名，通过函数名来进行调用。在JavaScript解释执行时，函数都是被维护为一个对象，这就是要介绍的函数对象（Function Object）。</p>
<p>　　函数对象与其他用户所定义的对象有着本质的区别，这一类对象被称之为内部对象，例如日期对象（Date）、数组对象（Array）、字符串对象（String）都属于内部对象。这些内置对象的构造器是由JavaScript本身所定义的：通过执行new Array()这样的语句返回一个对象，JavaScript内部有一套机制来初始化返回的对象，而不是由用户来指定对象的构造方式。</p>
<p>　　在JavaScript中，函数对象对应的类型是Function，正如数组对象对应的类型是Array，日期对象对应的类型是Date一样，可以通过new Function()来创建一个函数对象，也可以通过function关键字来创建一个对象。为了便于理解，我们比较函数对象的创建和数组对象的创建。先看数组对象：下面两行代码都是创建一个数组对象myArray：</p>
<p>var myArray=[];<br>//等价于<br>var myArray=new Array();<br>同样，下面的两段代码也都是创建一个函数myFunction：<br>function myFunction(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}<br>//等价于<br>var myFunction=new Function("a","b","return a+b");<br>　　通过和构造数组对象语句的比较，可以清楚的看到函数对象本质，前面介绍的函数声明是上述代码的第一种方式，而在解释器内部，当遇到这种语法时，就会自动构造一个Function对象，将函数作为一个内部的对象来存储和运行。从这里也可以看到，一个函数对象名称（函数变量）和一个普通变量名称具有同样的规范，都可以通过变量名来引用这个变量，但是函数变量名后面可以跟上括号和参数列表来进行函数调用。</p>
<p>　　用new Function()的形式来创建一个函数不常见，因为一个函数体通常会有多条语句，如果将它们以一个字符串的形式作为参数传递，代码的可读性差。下面介绍一下其使用语法：</p>
<p>var funcName=new Function(p1,p2,,pn,body);<br>　　参数的类型都是字符串，p1到pn表示所创建函数的参数名称列表，body表示所创建函数的函数体语句，funcName就是所创建函数的名称。可以不指定任何参数创建一个空函数，不指定funcName创建一个无名函数，当然那样的函数没有任何意义。</p>
<p>　　需要注意的是，p1到pn是参数名称的列表，即p1不仅能代表一个参数，它也可以是一个逗号隔开的参数列表，例如下面的定义是等价的：</p>
<p>new Function("a", "b", "c", "return a+b+c")<br>new Function("a, b, c", "return a+b+c")<br>new Function("a,b", "c", "return a+b+c")<br>　　JavaScript引入Function类型并提供new Function()这样的语法是因为函数对象添加属性和方法就必须借助于Function这个类型。<br>函数的本质是一个内部对象，由JavaScript解释器决定其运行方式。通过上述代码创建的函数，在程序中可以使用函数名进行调用。本节开头列出的函数定义问题也得到了解释。注意可直接在函数声明后面加上括号就表示创建完成后立即进行函数调用，例如：</p>
<p>var i=function (a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}(1,2);<br>alert(i);<br>　　这段代码会显示变量i的值等于3。i是表示返回的值，而不是创建的函数，因为括号&#8220;(&#8221;比等号&#8220;=&#8221;有更高的优先级。这样的代码可能并不常用，但当用户想在很长的代码段中进行模块化设计或者想避免命名冲突，这是一个不错的解决办法。</p>
<p>　　需要注意的是，尽管下面两种创建函数的方法是等价的：</p>
<p>function funcName(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //函数体<br>}<br>//等价于<br>var funcName=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //函数体<br>}<br>　　但前面一种方式创建的是有名函数，而后面是创建了一个无名函数，只是让一个变量指向了这个无名函数。在使用上仅有一点区别，就是：对于有名函数，它可以出现在调用之后再定义；而对于无名函数，它必须是在调用之前就已经定义。例如：</p>
<p>＜script language="JavaScript" type="text/javascript"＞<br>＜!--<br>func();<br>var func=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(1)<br>}<br>//--＞<br>＜/script＞<br>　　这段语句将产生func未定义的错误，而：</p>
<p>＜script language="JavaScript" type="text/javascript"＞<br>＜!--<br>func();<br>function func(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(1)<br>}<br>//--＞<br>＜/script＞<br>　　则能够正确执行，下面的语句也能正确执行：</p>
<p>＜script language="JavaScript" type="text/javascript"＞<br>＜!--<br>func();<br>var someFunc=function func(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(1)<br>}<br>//--＞<br>＜/script＞</p>
<p>　　由此可见，尽管JavaScript是一门解释型的语言，但它会在函数调用时，检查整个代码中是否存在相应的函数定义，这个函数名只有是通过function funcName()形式定义的才会有效，而不能是匿名函数。</p>
<p>　　函数对象和其他内部对象的关系</p>
<p>　　除了函数对象，还有很多内部对象，比如：Object、Array、Date、RegExp、Math、Error。这些名称实际上表示一个类型，可以通过new操作符返回一个对象。然而函数对象和其他对象不同，当用typeof得到一个函数对象的类型时，它仍然会返回字符串&#8220;function&#8221;，而typeof一个数组对象或其他的对象时，它会返回字符串&#8220;object&#8221;。下面的代码示例了typeof不同类型的情况：</p>
<p>&nbsp;</p>
<p>alert(typeof(Function)));<br>alert(typeof(new Function()));<br>alert(typeof(Array));<br>alert(typeof(Object));<br>alert(typeof(new Array()));<br>alert(typeof(new Date()));<br>alert(typeof(new Object()));<br>　　运行这段代码可以发现：前面4条语句都会显示&#8220;function&#8221;，而后面3条语句则显示&#8220;object&#8221;，可见new一个function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。尽管函数本身也是一个对象，但它与普通的对象还是有区别的，因为它同时也是对象构造器，也就是说，可以new一个函数来返回一个对象，这在前面已经介绍。所有typeof返回&#8220;function&#8221;的对象都是函数对象。也称这样的对象为构造器（constructor），因而，所有的构造器都是对象，但不是所有的对象都是构造器。</p>
<p>　　既然函数本身也是一个对象，它们的类型是function，联想到C++、Java等面向对象语言的类定义，可以猜测到Function类型的作用所在，那就是可以给函数对象本身定义一些方法和属性，借助于函数的prototype对象，可以很方便地修改和扩充Function类型的定义，例如下面扩展了函数类型Function，为其增加了method1方法，作用是弹出对话框显示"function"：</p>
<p>Function.prototype.method1=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("function");<br>}<br>function func1(a,b,c){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b+c;<br>}<br>func1.method1();<br>func1.method1.method1();<br>　　注意最后一个语句：func1.method1.mehotd1()，它调用了method1这个函数对象的method1方法。虽然看上去有点容易混淆，但仔细观察一下语法还是很明确的：这是一个递归的定义。因为method1本身也是一个函数，所以它同样具有函数对象的属性和方法，所有对Function类型的方法扩充都具有这样的递归性质。</p>
<p>　　Function是所有函数对象的基础，而Object则是所有对象（包括函数对象）的基础。在JavaScript中，任何一个对象都是Object的实例，因此，可以修改Object这个类型来让所有的对象具有一些通用的属性和方法，修改Object类型是通过prototype来完成的：</p>
<p>Object.prototype.getType=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return typeof(this);<br>}<br>var array1=new Array();<br>function func1(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}<br>alert(array1.getType());<br>alert(func1.getType());<br>　　上面的代码为所有的对象添加了getType方法，作用是返回该对象的类型。两条alert语句分别会显示&#8220;object&#8221;和&#8220;function&#8221;。</p>
<p>　　将函数作为参数传递</p>
<p>　　在前面已经介绍了函数对象本质，每个函数都被表示为一个特殊的对象，可以方便的将其赋值给一个变量，再通过这个变量名进行函数调用。作为一个变量，它可以以参数的形式传递给另一个函数，这在前面介绍JavaScript事件处理机制中已经看到过这样的用法，例如下面的程序将func1作为参数传递给func2：</p>
<p>function func1(theFunc){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theFunc();<br>}<br>function func2(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("ok");<br>}<br>func1(func2);<br>　　在最后一条语句中，func2作为一个对象传递给了func1的形参theFunc，再由func1内部进行theFunc的调用。事实上，将函数作为参数传递，或者是将函数赋值给其他变量是所有事件机制的基础。</p>
<p>　　例如，如果需要在页面载入时进行一些初始化工作，可以先定义一个init的初始化函数，再通过window.onload=init;语句将其绑定到页面载入完成的事件。这里的init就是一个函数对象，它可以加入window的onload事件列表。</p>
&nbsp;传递给函数的隐含参数：arguments
<p>　　当进行函数调用时，除了指定的参数外，还创建一个隐含的对象——arguments。arguments是一个类似数组但不是数组的对象，说它类似是因为它具有数组一样的访问性质，可以用arguments[index]这样的语法取值，拥有数组长度属性length。arguments对象存储的是实际传递给函数的参数，而不局限于函数声明所定义的参数列表，例如：</p>
<p>function func(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp; alert(a);<br>&nbsp;&nbsp;&nbsp;&nbsp; alert(b);<br>&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i＜arguments.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(arguments[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>func(1,2,3);<br>　　代码运行时会依次显示：1，2，1，2，3。因此，在定义函数的时候，即使不指定参数列表，仍然可以通过arguments引用到所获得的参数，这给编程带来了很大的灵活性。arguments对象的另一个属性是callee，它表示对函数对象本身的引用，这有利于实现无名函数的递归或者保证函数的封装性，例如使用递归来计算1到n的自然数之和：</p>
<p>var sum=function(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(1==n)return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return n+sum(n-1);<br>}<br>alert(sum(100));<br>　　其中函数内部包含了对sum自身的调用，然而对于JavaScript来说，函数名仅仅是一个变量名，在函数内部调用sum即相当于调用一个全局变量，不能很好的体现出是调用自身，所以使用arguments.callee属性会是一个较好的办法：</p>
<p>var sum=function(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(1==n)return 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return n+arguments.callee(n-1);<br>}<br>alert(sum(100));<br>　　callee属性并不是arguments不同于数组对象的惟一特征，下面的代码说明了arguments不是由Array类型创建：</p>
<p>Array.prototype.p1=1;<br>alert(new Array().p1);<br>function func(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(arguments.p1);<br>}<br>func();<br>　　运行代码可以发现，第一个alert语句显示为1，即表示数组对象拥有属性p1，而func调用则显示为&#8220;undefined&#8221;，即p1不是arguments的属性，由此可见，arguments并不是一个数组对象。 </p>
<p>　　函数的apply、call方法和length属性</p>
<p>　　JavaScript为函数对象定义了两个方法：apply和call，它们的作用都是将函数绑定到另外一个对象上去运行，两者仅在定义参数的方式有所区别：</p>
<p>&nbsp;</p>
<p>Function.prototype.apply(thisArg,argArray);<br>Function.prototype.call(thisArg[,arg1[,arg2&#8230;]]);<br>　　从函数原型可以看到，第一个参数都被取名为thisArg，即所有函数内部的this指针都会被赋值为thisArg，这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数，都是为Function对象传递的参数。下面的代码说明了apply和call方法的工作方式：</p>
<p>//定义一个函数func1，具有属性p和方法A<br>function func1(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.p="func1-";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.A=function(arg){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p+arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>//定义一个函数func2，具有属性p和方法B<br>function func2(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.p="func2-";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.B=function(arg){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p+arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>var obj1=new func1();<br>var obj2=new func2();<br>obj1.A("byA");&nbsp;&nbsp;&nbsp; //显示func1-byA<br>obj2.B("byB");&nbsp;&nbsp;&nbsp; //显示func2-byB<br>obj1.A.apply(obj2,["byA"]); //显示func2-byA，其中[&#8220;byA&#8221;]是仅有一个元素的数组，下同<br>obj2.B.apply(obj1,["byB"]); //显示func1-byB<br>obj1.A.call(obj2,"byA");&nbsp; //显示func2-byA<br>obj2.B.call(obj1,"byB");&nbsp; //显示func1-byB<br>　　可以看出，obj1的方法A被绑定到obj2运行后，整个函数A的运行环境就转移到了obj2，即this指针指向了obj2。同样obj2的函数B也可以绑定到obj1对象去运行。代码的最后4行显示了apply和call函数参数形式的区别。</p>
<p>　　与arguments的length属性不同，函数对象还有一个属性length，它表示函数定义时所指定参数的个数，而非调用时实际传递的参数个数。例如下面的代码将显示2：</p>
<p>function sum(a,b){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return a+b;<br>}<br>alert(sum.length);<br>　　深入认识JavaScript中的this指针</p>
<p>　　this指针是面向对象程序设计中的一项重要概念，它表示当前运行的对象。在实现对象的方法时，可以使用this指针来获得该对象自身的引用。</p>
<p>　　和其他面向对象的语言不同，JavaScript中的this指针是一个动态的变量，一个方法内的this指针并不是始终指向定义该方法的对象的，在上一节讲函数的apply和call方法时已经有过这样的例子。为了方便理解，再来看下面的例子：</p>
<p>＜script language="JavaScript" type="text/javascript"＞<br>＜!--<br>//创建两个空对象<br>var obj1=new Object();<br>var obj2=new Object();<br>//给两个对象都添加属性p，并分别等于1和2<br>obj1.p=1;<br>obj2.p=2;<br>//给obj1添加方法，用于显示p的值<br>obj1.getP=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p); //表面上this指针指向的是obj1<br>}<br>//调用obj1的getP方法<br>obj1.getP();<br>//使obj2的getP方法等于obj1的getP方法<br>obj2.getP=obj1.getP;<br>//调用obj2的getP方法<br>obj2.getP();<br>//--＞<br>＜/script＞<br>　　从代码的执行结果看，分别弹出对话框显示1和2。由此可见，getP函数仅定义了一次，在不同的场合运行，显示了不同的运行结果，这是有this指针的变化所决定的。在obj1的getP方法中，this就指向了obj1对象，而在obj2的getP方法中，this就指向了obj2对象，并通过this指针引用到了两个对象都具有的属性p。</p>
<p>　　由此可见，JavaScript中的this指针是一个动态变化的变量，它表明了当前运行该函数的对象。由this指针的性质，也可以更好的理解JavaScript中对象的本质：一个对象就是由一个或多个属性（方法）组成的集合。每个集合元素不是仅能属于一个集合，而是可以动态的属于多个集合。这样，一个方法（集合元素）由谁调用，this指针就指向谁。实际上，前面介绍的apply方法和call方法都是通过强制改变this指针的值来实现的，使this指针指向参数所指定的对象，从而达到将一个对象的方法作为另一个对象的方法运行。</p>
<p>　　每个对象集合的元素（即属性或方法）也是一个独立的部分，全局函数和作为一个对象方法定义的函数之间没有任何区别，因为可以把全局函数和变量看作为window对象的方法和属性。也可以使用new操作符来操作一个对象的方法来返回一个对象，这样一个对象的方法也就可以定义为类的形式，其中的this指针则会指向新创建的对象。在后面可以看到，这时对象名可以起到一个命名空间的作用，这是使用JavaScript进行面向对象程序设计的一个技巧。例如：</p>
<p>var namespace1=new Object();<br>namespace1.class1=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp; //初始化对象的代码<br>}<br>var obj1=new namespace1.class1();<br>　　这里就可以把namespace1看成一个命名空间。</p>
<p>　　由于对象属性（方法）的动态变化特性，一个对象的两个属性（方法）之间的互相引用，必须要通过this指针，而其他语言中，this关键字是可以省略的。如上面的例子中：</p>
<p>obj1.getP=function(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.p); //表面上this指针指向的是obj1<br>}<br>　　这里的this关键字是不可省略的，即不能写成alert(p)的形式。这将使得getP函数去引用上下文环境中的p变量，而不是obj1的属性。 <br></p>
<br>
<img src ="http://www.blogjava.net/microlab4321/aggbug/138177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-20 16:15 <a href="http://www.blogjava.net/microlab4321/articles/138177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript基础知识之this篇 </title><link>http://www.blogjava.net/microlab4321/articles/137047.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Wed, 15 Aug 2007 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137047.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137047.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137047.html</trackback:ping><description><![CDATA[文章出自:http://www.blogjava.net/BlueDavy/archive/2006/03/02/33285.html<br>介绍这方面的文章也有一些，我这里打算以一个demo来说明一下，也是基于prototype进行编写，javascript中的this看起来会和java中的this有些不同。<br>一个简单的测试，为了绑定事件到一个按钮上：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;src</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">prototype.js</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">input&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">button&nbsp;name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">btnTest&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">测试</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;TestThis</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Class.create();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_141_294_Open_Image onclick="this.style.display='none'; Codehighlighter1_141_294_Open_Text.style.display='none'; Codehighlighter1_141_294_Closed_Image.style.display='inline'; Codehighlighter1_141_294_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_141_294_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_141_294_Closed_Text.style.display='none'; Codehighlighter1_141_294_Open_Image.style.display='inline'; Codehighlighter1_141_294_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;TestThis.prototype</span><span style="COLOR: #000000">=</span><span id=Codehighlighter1_141_294_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_141_294_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_171_237_Open_Image onclick="this.style.display='none'; Codehighlighter1_171_237_Open_Text.style.display='none'; Codehighlighter1_171_237_Closed_Image.style.display='inline'; Codehighlighter1_171_237_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_171_237_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_237_Closed_Text.style.display='none'; Codehighlighter1_171_237_Open_Image.style.display='inline'; Codehighlighter1_171_237_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialize:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(btn)</span><span id=Codehighlighter1_171_237_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_171_237_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestThis</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(btn).onclick</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.clickButton;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_264_290_Open_Image onclick="this.style.display='none'; Codehighlighter1_264_290_Open_Text.style.display='none'; Codehighlighter1_264_290_Closed_Image.style.display='inline'; Codehighlighter1_264_290_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_264_290_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_264_290_Closed_Text.style.display='none'; Codehighlighter1_264_290_Open_Image.style.display='inline'; Codehighlighter1_264_290_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clickButton:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id=Codehighlighter1_264_290_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_264_290_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.value);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TestThis(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">btnTest</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
在IE中执行代码会发现点击按钮后弹出的提示的值为"测试"，按照java的思想去看的话我们会觉得这是很奇怪的事，因为按照java执行的话这个时候一定是弹出"TestThis"...<br>那么为什么会发生这样的状况呢，其实就是在将按钮的onclick事件绑定到clickButton造成的，当事件发生时候当前的对象为button，而不是TestThis，自然这个时候的this也就是button了...<br>有些时候我们是不希望这样的，在拥有prototype的情况下我们可以用它提供的bind来解决，将上面的绑定按钮的onclick事件部分的代码改为：<br>$(btn).onclick=this.clickButton.bind(this);<br>再次执行后会发现这个时候点击按钮弹出的提示的值就变为"TestThis"了，呵呵，其实就是prototype帮忙将这个时候的参数进行了重新的绑定..<br>bind和extend是prototype中两个非常重要的方法，去看prototype.js就会发现，里面很多地方都用到了Object.extend和Function.prototype.bind这两个函数...<br>bind可以起到的作用就象我上面说的..<br>extend起到的作用则为继承和扩展，^_^ 
<img src ="http://www.blogjava.net/microlab4321/aggbug/137047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-15 21:19 <a href="http://www.blogjava.net/microlab4321/articles/137047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript学习笔记——客户端与服务器端的通信 </title><link>http://www.blogjava.net/microlab4321/articles/137041.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Wed, 15 Aug 2007 13:02:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137041.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137041.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137041.html</trackback:ping><description><![CDATA[文章出自"http://www.blogjava.net/amigoxie/archive/2007/08/15/136809.aspx<br>
<p><span>说明：该文为《</span><span>JavaScript</span><span>高级程序设计》第</span><span>16</span><span>章学习笔记。</span></p>
<p><span>&nbsp;</span><span>在</span><span>Web</span><span>项目中，要实现客户端与服务端的交互，可通过</span><span>cookie</span><span>、隐藏框架、</span><span>HTTP</span><span>请求、</span><span>LiveConnect</span><span>请求和智能</span><span>HTTP</span><span>请求等方式实现，</span></p>
<p><strong><span><span>一．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>cookie</span></strong></p>
<p><span>&nbsp;cookie</span><span>是第一个</span><span>JavaScript</span><span>可以利用的客户端</span><span>-</span><span>服务端之间的交互手段。浏览器向服务器发送请求时，为这个服务器存储的</span><span>cookie</span><span>会与其他信息一起发送到服务器。这使得</span><span>JavaScript</span><span>可以在客户端设置一个</span><span>cookie</span><span>，之后服务器端就能够读取它了。</span></p>
<p><strong><span><span>1．<span>&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>cookie</span></strong><strong><span>的成分</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称——每一个</span><span>cookie</span><span>由一个唯一的名称代表。这个名称可以包含字母、数字和下划线。不区分大小写。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 值——保存在</span><span>cookie</span><span>中的字符串值。这个值在存储之前必须用</span><span>encodeURIComponent()</span><span>对其进行编码，以免丢失数据或占用了</span><span>cookie</span><span>。名称和值加起来的字节数不能超过</span><span>4095</span><span>字节，也就是</span><span>4KB</span><span>。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;域——处于安全考虑，网站不能访问其他域创建的</span><span>cookie</span><span>。创建</span><span>cookie</span><span>后，域的信息会作为</span><span>cookie</span><span>的一部分存储起来。不过，虽然这不常见，还是可以覆盖这个设置以允许另一个网站访问这个</span><span>cookie</span><span>的。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 路径——另一个</span><span>cookie</span><span>的安全特性，路径限制了对</span><span>Web</span><span>服务器上的特定目录的访问。例如，可指定</span><span>cookie</span><span>只能从</span><span><a href="http://www.wrox.com/books"><u><font color=#638f27>http://www.wrox.com/books</font></u></a></span><span>中访问。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 失效日期——确定</span><span>cookie</span><span>何时删除。默认情况下，关闭浏览器时，即将</span><span>cookie</span><span>删除，不过可以自己设置删除时间。这个值是个</span><span>GMT</span><span>格式的日期（可以使用</span><span>Date</span><span>对象的</span><span>toGMTString()</span><span>方法），用于制定应该删除</span><span>cookie</span><span>的准确时间。如果设置的日期是当前日期以前的时间，则</span><span>cookie</span><span>被立刻删除。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安全标志——用于表示</span><span>cookie</span><span>是否只能从安全网站（使用</span><span>SSL</span><span>和</span><span>https</span><span>协议的网站）中访问。可以将这个值设为</span><span>true</span><span>以加强保护，进而确保</span><span>cookie</span><span>不被其他网站访问。</span></p>
<p><strong><span><span>2．<span>&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>其他安全限制</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp; i）每个域最多只能只能在一台用户的机器上存储</span><span>20</span><span>个</span><span>cookie</span><span>；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp; ii）每个</span><span>cookie</span><span>的总尺寸不能超过</span><span>4096</span><span>字节；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp; iii）一台用户的机器上的</span><span>cookie</span><span>总数不能超过</span><span>30</span><span>个。</span></p>
<p><strong><span><span>3．<span>&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>JavaScript</span></strong><strong><span>中的</span><span>cookie</span></strong></p>
<p><span>&nbsp;</span><span>下面来看一个设置</span><span>cookie</span><span>的函数，如下所示：</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_72_388_Open_Image onclick="this.style.display='none'; Codehighlighter1_72_388_Open_Text.style.display='none'; Codehighlighter1_72_388_Closed_Image.style.display='inline'; Codehighlighter1_72_388_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_72_388_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_72_388_Closed_Text.style.display='none'; Codehighlighter1_72_388_Open_Image.style.display='inline'; Codehighlighter1_72_388_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;setCookie(sName,&nbsp;sValue,&nbsp;oExpires,&nbsp;sPath,&nbsp;sDomain,&nbsp;bSecure)&nbsp;</span><span id=Codehighlighter1_72_388_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_72_388_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;sCookie&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sName&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;&#8220;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#8221;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">encodeURIComponent(sValue);<br><img id=Codehighlighter1_145_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_145_205_Open_Text.style.display='none'; Codehighlighter1_145_205_Closed_Image.style.display='inline'; Codehighlighter1_145_205_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_145_205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_205_Closed_Text.style.display='none'; Codehighlighter1_145_205_Open_Image.style.display='inline'; Codehighlighter1_145_205_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(oExpires)&nbsp;</span><span id=Codehighlighter1_145_205_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_145_205_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sCookie&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&#8221;;&nbsp;expires</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&#8221;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;oExpires.toGMTString();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_218_256_Open_Image onclick="this.style.display='none'; Codehighlighter1_218_256_Open_Text.style.display='none'; Codehighlighter1_218_256_Closed_Image.style.display='inline'; Codehighlighter1_218_256_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_218_256_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_256_Closed_Text.style.display='none'; Codehighlighter1_218_256_Open_Image.style.display='inline'; Codehighlighter1_218_256_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sPath)&nbsp;</span><span id=Codehighlighter1_218_256_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_218_256_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sCookie&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;&#8220;;&nbsp;path&#8221;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;sPath;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_271_313_Open_Image onclick="this.style.display='none'; Codehighlighter1_271_313_Open_Text.style.display='none'; Codehighlighter1_271_313_Closed_Image.style.display='inline'; Codehighlighter1_271_313_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_271_313_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_271_313_Closed_Text.style.display='none'; Codehighlighter1_271_313_Open_Image.style.display='inline'; Codehighlighter1_271_313_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sDomian)&nbsp;</span><span id=Codehighlighter1_271_313_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_271_313_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sCookie&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;&#8220;;&nbsp;domain&#8221;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;sDomain;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_328_359_Open_Image onclick="this.style.display='none'; Codehighlighter1_328_359_Open_Text.style.display='none'; Codehighlighter1_328_359_Closed_Image.style.display='inline'; Codehighlighter1_328_359_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_328_359_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_328_359_Closed_Text.style.display='none'; Codehighlighter1_328_359_Open_Image.style.display='inline'; Codehighlighter1_328_359_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(bSecure)&nbsp;</span><span id=Codehighlighter1_328_359_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_328_359_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sCookie&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;&#8220;;secure&#8221;;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>document.cookie&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;sCookie;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span><span>setCookie()</span><span>函数只有前两个参数是必须的，函数的调用方法如下：</span></p>
<p><span>setCookie(&#8220;name&#8221;, &#8220;</span><span>阿蜜果</span><span>&#8221;);</span></p>
<p><span>setCookie(&#8220;book&#8221;, &#8220;JavaScript</span><span>高级程序设计</span><span>&#8221;, &nbsp;new Date(Date.parse(&#8220;Jan 1, <st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="2006" UnitName="&#8221;">2006&#8221;</st1:chmetcnv>)));</span></p>
<p><span>setCookie(&#8220;message&#8221;, &#8220;hello&#8221;, new Date(Date.parse(&#8220;Jan 1, <st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="2006" UnitName="&#8221;">2006&#8221;</st1:chmetcnv>)), &#8220;/books&#8221;, <a href="http://www.wrox.com/"><u><font color=#638f27>http://www.wrox.com</font></u></a>, true );</span></p>
<p><span>下面的函数是一个根据</span><span>cookie</span><span>的名称获取</span><span>cookie</span><span>的方法，代码如下：</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_26_179_Open_Image onclick="this.style.display='none'; Codehighlighter1_26_179_Open_Text.style.display='none'; Codehighlighter1_26_179_Closed_Image.style.display='inline'; Codehighlighter1_26_179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_26_179_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_26_179_Closed_Text.style.display='none'; Codehighlighter1_26_179_Open_Image.style.display='inline'; Codehighlighter1_26_179_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;getCookie(sName)&nbsp;</span><span id=Codehighlighter1_26_179_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_26_179_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;sRE</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">(?:;.)?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;sName&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=([^;]*);?;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;var&nbsp;oRE=&nbsp;new&nbsp;RegExp(sRE);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;if&nbsp;(oRE.test(document.cookie))&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;decodeURIComponent(RegExp[&#8220;$1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img id=Codehighlighter1_186_208_Open_Image onclick="this.style.display='none'; Codehighlighter1_186_208_Open_Text.style.display='none'; Codehighlighter1_186_208_Closed_Image.style.display='inline'; Codehighlighter1_186_208_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_186_208_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_208_Closed_Text.style.display='none'; Codehighlighter1_186_208_Open_Image.style.display='inline'; Codehighlighter1_186_208_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_186_208_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_186_208_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span>&nbsp;</p>
<p><span>调用该方法可以获取指定名称的</span><span>cookie</span><span>，调用举例如下：</span></p>
<p><span>var sName = getCookie(&#8220;name&#8221;);</span></p>
<p><span>下面我们再编写一个删除</span><span>cookie</span><span>的函数，只需将失效时间设为过去的一个时间即可，代码如下：</span></p>
<p><span>function deleteCookie(sName, sPath, sDomain) {</span></p>
<p><span>&nbsp;setCookie(sName, &#8220;&#8221;, new Date(0), sPath, sDomain);</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><strong><span>4. </span></strong><strong><span>服务器端的</span><span>cookie</span></strong></p>
<p><strong><span>1</span></strong><strong><span>）</span><span>JSP</span></strong></p>
<p><span>&nbsp;Jsp</span><span>提供了非常简单的处理</span><span>cookie</span><span>的接口，</span><span>request</span><span>对象会在执行</span><span>JSP</span><span>时自动初始化，有一个返回一个</span><span>Cookie</span><span>对象数组的方法</span><span>getCookies()</span><span>方法。每个</span><span>Cookie</span><span>对象都具有</span><span>getName()</span><span>、</span><span>getPath(), getDomain(),getSecure()</span><span>，</span><span>getMaxAge()</span><span>等方法，下面我们还看一个获取</span><span>Cookie</span><span>的方法：</span></p>
<p><span>public static Cookie getCookie(HttpServletRequest request, String name) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Cookie[] cookies = request.getCookies();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (cookies != null) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (int i = 0; i&lt;cookies.length; i++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (cookies[i].getName().equals(name)) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return cookies[i];</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>下面让我们再来看看怎么样新建一个</span><span>cookie</span><span>：</span></p>
<p><span>Cookie nameCookie = new Cookie(&#8220;name&#8221;, &#8220;Amigo&#8221;);</span></p>
<p><span>nameCookie.setDomain(&#8220;http://www.wrox.com&#8221;);</span></p>
<p><span>nameCookie.setPath(&#8220;/books&#8221;);</span></p>
<p><span>response.addCookie(nameCookie);</span></p>
<p><span>要删除</span><span>cookie</span><span>，可用如下方法：</span></p>
<p><span>Cookie cookieToDelete = getCookie(&#8220;name&#8221;);</span></p>
<p><span>cookieToDelete.setMaxAge(0);</span></p>
<p><span>response.addCookie(cookieToDelete);</span></p>
<p><strong><span>2</span></strong><strong><span>）</span><span>ASP.NET</span></strong></p>
<p><span>&nbsp;</span><span>略。</span></p>
<p><strong><span>3</span></strong><strong><span>）</span><span>PHP</span></strong></p>
<p><span>&nbsp;</span><span>略。</span></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span><span>二．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>隐藏框架</span></strong></p>
<p><span>方法就是创建一个可用</span><span>JavaScript</span><span>与服务器进行通信的</span><span>0</span><span>像素高的框架。这种通信方式要求两部分内容：用于处理客户端通信的</span><span>JavaScript</span><span>对象和在服务端处理通信的特殊页面。</span><span>Eg.<strong></strong></span></p>
<p><span>&lt;html&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;head&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;title&gt;</span><span>隐藏框架的例子</span><span>&lt;/title&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/head&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;frameset rows=&#8221;*, <st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="0" UnitName="&#8221;">0&#8221;</st1:chmetcnv>&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;frame src=&#8221;test1.html&#8221; nam=&#8221;mainFrame&#8221; /&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;frame src=&#8221;hidden.html&#8221; nam=&#8221;hiddenFrame&#8221; /&gt; </span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/frameset&gt;</span></p>
<p><span>&lt;/html&gt;</span></p>
<p><span>在第一个框架中，定义了两个函数，一个用于向服务器发送请求，另一个用于处理响应。发送请求的函数如下：</span></p>
<p><span>function getServerInfo() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>parent.frames[&#8220;hiddenFrame&#8221;].location.href = &#8220;hiddenFrameCom.html&#8221;;</span></p>
<p><span>}</span></p>
<p><span>处理回应的函数</span><span>handleResponse()</span><span>的代码如下：</span></p>
<p><span>function handleResponse(sResponseTextt) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>alert(&#8220;</span><span>服务器返回：</span> <span>&#8221; + sResponseTextt);</span></p>
<p><span>}</span></p>
<p><span>处理隐藏请求的页面必须输出一个普通的</span><span>HTML</span><span>页面，其中有个</span><span>&lt;textarea/&gt;</span><span>元素，包含返回的元素。使用</span><span>&lt;textarea/&gt;</span><span>可以方便的处理多行数据，这个页面必须在主框架中调用</span><span>handleResponse()</span><span>函数。实例代码如下：</span></p>
<p><span>&lt;html&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;head&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;title&gt;</span><span>隐藏框架的例子</span><span>&lt;/title&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;script type=&#8221;text/javascript&#8221;&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>window.onload = function() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>parent.frames[0].handleResponse(</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>document.forms[&#8220;formResponse&#8221;].result.value);</span></p>
<p><span>};</span></p>
<p><span>&lt;/script&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/head&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;body&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form name=&#8221;formResponse&#8221;&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;textarea name=&#8221;result&#8221;&gt;</span><span>传送回的数据</span><span>&lt;/textarea&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/form&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/body&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/html&gt;<strong> </strong></span></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span><span>三．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>HTTP</span></strong><strong><span>请求</span></strong></p>
<p><span>&nbsp;</span><span>现在很多浏览器都可以直接从</span><span>JavaScript</span><span>中初始化</span><span>HTTP</span><span>请求并获取结果，完全不用隐藏框架和其他取巧的小技巧。</span></p>
<p><span>&nbsp;</span><span>这个令人振奋的新功能的核心是，微软创建的</span><span>XML HTTP</span><span>请求的对象。这个对象是与</span><span>MSXML</span><span>一起出现的，直到最近它的能力才被完全挖掘。</span><span>XML HTTP</span><span>请求实质上是添加了额外的用于发送和接收</span><span>XML</span><span>代码的功能的普通的</span><span>HTTP</span><span>请求。</span></p>
<p><span>&nbsp;</span><span>要在</span><span>IE</span><span>中重新创建</span><span>XML HTTP</span><span>请求对象，还是要使用</span><span>ActiveXObject</span><span>，如下所示：</span></p>
<p><span>var oRequest = new ActiveXObject(&#8220;Microsoft.XMLHTTP&#8221;);</span></p>
<p><span>&nbsp;</span><span>下面让我们看一个创建</span><span>XML HTTP</span><span>的方法：</span></p>
<p><span>function createXMLHTTP() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var arrSignatures = [&#8220;MSXML2.XMLHTT<st1:chsdate w:st="on" Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False">P.5.0</st1:chsdate>&#8221;, &#8220;MSXML2.XMLHTTP.<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="4" UnitName="&#8221;">4.0&#8221;</st1:chmetcnv>,</span></p>
<p><span>&#8220;MSXML2.XMLHTT<st1:chsdate w:st="on" Year="1899" Month="12" Day="30" IsLunarDate="False" IsROCDate="False">P.3.0</st1:chsdate>&#8221;, &#8220;MSXML2.XMLHTTP&#8221;,</span></p>
<p><span>&#8220;Microsoft.XMLHTTP&#8221;];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for (var i=0; i&lt; arrSignatures.length; i++) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>try {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var oRequest = new ActiveXObject(arrSignatures[i]);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return oRequest;</span></p>
<p><span>} catch (oError) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//ignore</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>throw new Error(&#8220;</span><span>你的机器上没有安装</span><span>MSXML!&#8221;);</span></p>
<p><span>}</span></p>
<p><span>创建好</span><span>HTTP</span><span>请求后，可用</span><span>open()</span><span>方法来指定要发送的请求，该方法的参数描述如下：</span></p>
<p><span>第一个参数：值可为&#8220;</span><span>get</span><span>&#8221;或&#8220;</span><span>post</span><span>&#8221;，或其他受服务器支持的</span><span>HTTP</span><span>方法；</span></p>
<p><span>第二个参数：请求的</span><span>URL</span><span>；</span></p>
<p><span>第三个参数：表示请求是否以异步方式发送的布尔值。</span></p>
<p><span>Eg. oRequest.open(&#8220;get&#8221;, &#8220;example.txt&#8221;, false);</span></p>
<p><span>打开后，可用</span><span>send()</span><span>方法将请求发送出去，该方法需带一个参数，该参数可为</span><span>null</span><span>，</span></p>
<p><span>eg. oRequest.send(null);</span></p>
<p><span>下面让我们来看一个比较完整的例子：</span></p>
<p><span>var oRequest = createXMLHTTP();</span></p>
<p><span>oRequest.open(&#8220;get&#8221;, &#8220;example.txt&#8221;, false);</span></p>
<p><span>oRequest.send(null);</span></p>
<p><span>alert(&#8220;</span><span>状态：</span><span>&#8221; + oRequest.status + &#8220;(&#8221; + oRequest.statusText + &#8220;)&#8221;);</span></p>
<p><span>alert(&#8220;</span><span>回应的文本信息：</span><span>&#8221; + oRequest.responseText);</span></p>
<p><span>该例获取服务器端的一个纯文本文件，然后显示此内容。</span></p>
<p><span>如果发送异步请求，必须使用</span><span>onreadystatechange</span><span>事件处理函数，并检查</span><span>readyState</span><span>特性是否等于</span><span>4</span><span>（与</span><span>XML DOM</span><span>一样）。让我们来看一个例子：</span></p>
<p><span>var oRequest = createXMLHTTP();</span></p>
<p><span>oRequest.open(&#8220;get&#8221;, &#8220;example.txt&#8221;, true);</span></p>
<p><span>oRequest.onreadystatechange = function() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>if (oRequest.readyState == 4) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>alert(&#8220;</span><span>状态：</span><span>&#8221; + oRequest.status + &#8220;(&#8221; + oRequest.statusText + &#8220;)&#8221;);</span></p>
<p><span>alert(&#8220;</span><span>回应的文本信息：</span><span>&#8221; + oRequest.responseText);</span></p>
<p>&nbsp;</p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>oRequest.send(null);</span></p>
<p><strong><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>使用</span><span>HTTP</span></strong><strong><span>头部</span></strong></p>
<p><span>XML HTTP</span><span>请求对象提供了获取</span><span>HTTP</span><span>头部和设置它们的方法：</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>getAllResponseHeaders()</span><span>：返回包含所有响应的</span><span>HTTP</span><span>首部信息的字符串；</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>getResponseHeader()</span><span>：获取指定的某个头部，参数为获取的首部的名称，</span><span>eg. var sValue = oRequest.getResponseHeader(&#8220;Server&#8221;);</span></p>
<p><span><span>l<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>setResponseHeader()</span><span>：设置</span><span>XML HTTP</span><span>请求的首部信息，</span><span>eg. oRequest. setResponseHeader(&#8220;myheader&#8221;, &#8220;</span><span>阿蜜果</span><span>&#8221;).</span></p>
<p><strong><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>实现的赋值品</span></strong></p>
<p><span>Mozilla</span><span>第一个复制了</span><span>XML HTTP</span><span>实现，创建了名为</span><span>XMLHTTPRequest</span><span>的</span><span>JavaScript</span><span>，行为完全与微软的版本相同，</span><span>Opera(7.6)</span><span>和</span><span>Safari</span><span>（</span><span>1.2</span><span>）也复制了</span><span>Mozilla</span><span>的实现，创建了自己的</span><span>XMLHTTPRequest</span><span>对象。</span></p>
<p><strong><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>进行</span><span>GET</span></strong><strong><span>请求</span></strong></p>
<p><span>Web</span><span>上最常见的请求类型就是</span><span>GET</span><span>请求，下面让我们来看一个</span><span>GET</span><span>请求的例子，代码如下所示：</span></p>
<p><span>首先为了添加参数的方便性，让我们增加一个添加参数的方法，然后为请求构建一个</span><span>URL,</span><span>代码如下所示：</span></p>
<p><span>function addURLParam(url, sParamName, sParamValue) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>url += (url.indexOf(&#8220;?&#8221;) == -1 ? &#8220;?&#8221; : &#8220;&amp;&#8221;);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>url += encodeURIComponent(sParamName) + &#8220;=&#8221; + encodeURIComponent(sParamValue);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>return url;</span></p>
<p><span>}</span></p>
<p><span>var url = &nbsp;&#8220;<a href="http://www.blogjava.net/amigoxie"><u><font color=#638f27>http://www.blogjava.net/amigoxie</font></u></a>&#8221;;</span></p>
<p><span>url = addURLParam(url, &#8220;gender&#8221;, &#8220;</span><span>女</span><span>&#8221;);</span></p>
<p><span>url = addURLParam(url, &#8220;age&#8221;, &#8220;<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="25" UnitName="&#8221;">25&#8221;</st1:chmetcnv>);</span></p>
<p><span>oRequest.open(&#8220;get&#8221;, url, false);</span></p>
<p><strong><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>进行</span><span>POST</span></strong><strong><span>请求</span></strong></p>
<p><span>POST</span><span>请求用于在表单中输入数据后的提交过程，因为</span><span>POST</span><span>可以比</span><span>GET</span><span>方式发送更多数据（最多</span><span>2GB</span><span>）。让我们来可看一个例子：</span></p>
<p><span>function addPostParam(sParams, sParamName, sParamValue) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>if (sParams.length &gt; 0) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sParams += &#8220;&amp;&#8221;;</span></p>
<p><span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>return sParams + encodeURIComponent(sParamName) + &#8220;=&#8221; + encodeURIComponent(sParamValue);</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>Var sParams = &#8220;&#8221;;</span></p>
<p><span>sParams = addPostParam(sParams, &#8220;gender&#8221;, &#8220;</span><span>女</span><span>&#8221;);</span></p>
<p><span>sParams = addPostParam(sParams, &#8220;age&#8221;, &#8220;<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="25" UnitName="&#8221;">25&#8221;</st1:chmetcnv>);</span></p>
<p><span>oRequest.open(&#8220;open&#8221;, &#8220;test.jsp&#8221;, false);</span></p>
<p><span>oRequest.send(sParams);</span></p>
<p>&nbsp;</p>
<p><strong><span><span>四．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>LiveConnect</span></strong><strong><span>请求</span></strong></p>
<p><span>&nbsp;LiveConnect</span><span>由</span><span>Netscape Navigator</span><span>引入，一般可以让</span><span>JavaScript</span><span>与</span><span>Java</span><span>类实现交互的能力。用户必须安装</span><span>JRE,</span><span>并且还需在浏览器中启用</span><span>Java</span><span>。</span></p>
<p><strong><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>进行</span><span>GET</span></strong><strong><span>请求</span></strong></p>
<p><span>使用</span><span>Live Connect</span><span>时，必须提供类的完整名称，才能初始化一个</span><span>Java</span><span>对象。创建</span><span>URL</span><span>后，就可以打开一个输入流并使用读取器来读取数据。最好的方法是创建一个</span><span>InputStreamReader</span><span>，然后再基于它创建一个</span><span>BufferReader</span><span>，实例代码如下：</span></p>
<p><span>function httpGet(url) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>var ourl = new java.net.URL(url);</span></p>
<p><span>var oStream = ourl.openStream();</span></p>
<p><span>var oReader = new java.io.BufferedReader(new java.io.InputStreamReader(oStream));</span></p>
<p><span>var oResponseText = &#8220;&#8221;;</span></p>
<p><span>var sLine = oReader.readLine();</span></p>
<p><span>while (sLine != null) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>oResponseText += sLine + &#8220;\n&#8221;;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sLine = oReader.readLine();</span></p>
<p><span>}</span></p>
<p><span>oReader.close();</span></p>
<p><span>return oResponseText;</span></p>
<p><span>}</span></p>
<p><span>注意：与</span><span>XML HTTP</span><span>请求对象不通，</span><span>LiveConnect</span><span>要求输入完整的请求的</span><span>URL</span><span>，从</span><span>http://</span><span>开始，因为，这个</span><span>Java</span><span>对象没有任何解释相对</span><span>URL</span><span>的上下文。</span></p>
<p><strong><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>进行</span><span>POST</span></strong><strong><span>请求</span></strong></p>
<p><span>因为</span><span>POST</span><span>请求可看作是双向的，所以必须使用</span><span>setDoInput()</span><span>和</span><span>setDoOutput()</span><span>方法将连接设成接受输入和输出。另外，连接不应该使用任何缓存数据，所以要调用</span><span>setUseCaches(false)</span><span>。与</span><span>XML HTTP</span><span>请求对象一样，还必须用</span><span>setRequestProperty()</span><span>方法将&#8220;</span><span>Content-Type</span><span>&#8221;设置为相应的值。代码如下：</span></p>
<p><span>function httpPost(url, sParams) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>var ourl = new java.net.URL(url);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>var oConnection = ourl.openConnection();</span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>oConnection.setDoInput(true);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>oConnection.setDoOutput(true);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>oConnection.setUseCaches(false);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>oConnection.setRequestProperty(&#8220;Content-Type&#8221;,</span></p>
<p><span>&#8220;application/x-www-form-urlencoded&#8221;);</span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var output = new java.io.DataOutputStream(oConnection.getOutputStream());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>output.writeBytes(sParams);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>output.flush();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>output.close();</span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var sLine = &#8220;&#8221;, sResponseText = &#8220;&#8221;;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var input = new java.io.DataInputStream(oConnection.getInputStream());</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sLine = input.readLine();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while (sLine != null) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sResponseText&nbsp;+= sLine + &#8220;\n&#8221;;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sLine = input.readLine();</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>input.close();</span></p>
<p><span>return oResponseText;</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><strong><span><span>五．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>智能</span><span>HTTP</span></strong><strong><span>请求</span></strong></p>
<p><span>&nbsp;</span><span>对于两种完全不同的</span><span>HTTP</span><span>请求方法，有一系列通用的函数会对开发很有帮助。</span></p>
<p><strong><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>get()</span></strong><strong><span>方法</span><span><br>&nbsp;</span></strong><span>该方法用于对指定的</span><span>URL</span><span>进行一个</span><span>GET</span><span>请求。该方法有两个参数：发送请求的</span><span>URL</span><span>和一个回调函数。回调函数在很多编程语言中是用于在请求结束时通知开发者的。整合后的通用的</span><span>get()</span><span>方法代码如下：</span></p>
<p><span>var bXmlHttpSupport = (typeof XMLHttpRequest == &#8220;object&#8221; || window.ActiveXObject);</span></p>
<p><span>Http.get = function (url, fnCallback) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (bXmlHttpSupport) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var oRequest = new XMLHttpRequest();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>oRequest.open(&#8220;get&#8221;, url, true);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>oRequest.onreadystatechange = function() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (oRequest.readyState == 4) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fnCallback(oRequest.responseText);</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>oRequest.send(null);</span></p>
<p><span>} else if (navigator.javaEnabled() &amp;&amp; typeof java != &#8220;undefined&#8221; </span></p>
<p><span>&amp;&amp; type java.net != &#8220;undefined&#8221;) {</span></p>
<p><span>setTimeout(function() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fnCallback(httpGet(url));</span></p>
<p><span>}, 10);</span></p>
<p><span>} else {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>alert(&#8220;</span><span>你的浏览器不支持</span><span>HTTP</span><span>请求</span><span>!&#8221;);</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><strong><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>post()</span></strong><strong><span>方法</span></strong></p>
<p><span>除了需要三个参数（</span><span>URL</span><span>、参数字符串和回调函数）外，</span><span>post()</span><span>方法类似于</span><span>get()</span><span>方法。代码如下：</span></p>
<p><span>var bXmlHttpSupport = (typeof XMLHttpRequest == &#8220;object&#8221; || window.ActiveXObject);</span></p>
<p><span>Http.post = function(url, sParams, fnCallback) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (bXmlHttpSupport) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>var oRequest = new XMLHttpRequest();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>oRequest.open(&#8220;post&#8221;, url, true);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>oRequest.setRequestHeader(&#8220;Content-Type&#8221;,</span></p>
<p><span>&#8220;application/x-www-form-urlencoded&#8221;);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>oRequest.onreadysatechange = function() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (oRequest.readyState == 4) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fnCallback(oRequest.responseText);</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>} else if ((navigator.javaEnabled() &amp;&amp; typeof java != &#8220;undefined&#8221; </span></p>
<p><span>&amp;&amp; type java.net != &#8220;undefined&#8221;) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>setTimeout(function() {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>fnCallback(httpPost(url, sParams));</span></p>
<p><span>}, 10);</span></p>
<p><span>} else {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>alert(&#8220;</span><span>你的浏览器不支持</span><span>HTTP</span><span>请求</span><span>!&#8221;);</span></p>
<p><span>}</span></p>
<p><span>}</span></p>
<p><span>注意：使用这个方法必须提供完整的</span><span>URL.</span></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-15 21:02 <a href="http://www.blogjava.net/microlab4321/articles/137041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript学习笔记——错误处理 </title><link>http://www.blogjava.net/microlab4321/articles/136302.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 13 Aug 2007 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/136302.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/136302.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/136302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/136302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/136302.html</trackback:ping><description><![CDATA[<p><span>说明：参见《</span><span>JavaScript</span><span>高级程序设计》第</span><span>14</span><span>章。</span></p>
&nbsp;
<p><strong><span><span>一．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>错误分类</span></strong></p>
<p><strong><span><span>1．<span> </span></span></span></strong><strong><span>语法错误</span></strong></p>
<p><span>也称为解析错误，发生在传统编程语言的编译时，在</span><span>JavaScript</span><span>中发生在解释时，这些错误是由代码中的意外字符直接引起的，然后就不能直接编译</span><span>/</span><span>解释，</span><span>eg</span><span>，在一行代码因缺少右括号，产生了语法错误。发生语法错误时，就不能继续执行代码。在</span><span>JavaScript</span><span>中，只有在同一个线程中的代码会受语法错误的影响。在其他线程中的代码和其他外部引用的文件中的代码，如果不依赖于包含错误的代码，则可以继续执行。</span></p>
<p><strong><span><span>2．<span> </span></span></span></strong><strong><span>运行时错误</span></strong></p>
<p><span>也称为异常（</span><span>exception</span><span>，在编译期</span><span>/</span><span>解释器后）。此时，问题并不出在代码的语法上，而是，尝试完成的一个操作，在某些情况下是非法的。</span><span>eg.</span></p>
<p><span>window.openMyFile();</span></p>
<p><span>因不存在</span><span>openMyFile()</span><span>方法，浏览器会返回一个异常。异常只影响发生的线程，其他</span><span>JavaScript</span><span>线程即可继续正常的执行。</span></p>
<p>&nbsp;</p>
<p><strong><span><span>二．<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>处理错误</span></strong></p>
<p><strong><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>onerror</span></strong><strong><span>事件处理函数</span></strong></p>
<p><span>它是第一个用来协助</span><span>JavaScript</span><span>处理错误的机制。页面上出现异常时，</span><span>error</span><span>事件便在</span><span>window</span><span>对象上触发。</span><span>Eg.</span></p>
<p><span>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">onerror例子</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_96_180_Open_Image onclick="this.style.display='none'; Codehighlighter1_96_180_Open_Text.style.display='none'; Codehighlighter1_96_180_Closed_Image.style.display='inline'; Codehighlighter1_96_180_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_96_180_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_180_Closed_Text.style.display='none'; Codehighlighter1_96_180_Open_Image.style.display='inline'; Codehighlighter1_96_180_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_96_180_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_96_180_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img id=Codehighlighter1_143_168_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_168_Open_Text.style.display='none'; Codehighlighter1_143_168_Closed_Image.style.display='inline'; Codehighlighter1_143_168_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_143_168_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_168_Closed_Text.style.display='none'; Codehighlighter1_143_168_Open_Image.style.display='inline'; Codehighlighter1_143_168_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()&nbsp;</span><span id=Codehighlighter1_143_168_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_143_168_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("发生错误！");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="fuction1()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<p></span>&nbsp;</p>
<p><span>&nbsp;</span><span>在上述代码中，在页面载入时尝试调用不存在的函数，此时会引发一个异常。弹出&#8220;发生错误&#8221;的错误信息。但是，浏览器的错误信息也显示出来了，如何在浏览器上隐藏它呢，只需</span><span>onerror</span><span>方法返回一个</span><span>true</span><span>即可。</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_31_107_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_107_Open_Text.style.display='none'; Codehighlighter1_31_107_Closed_Image.style.display='inline'; Codehighlighter1_31_107_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_31_107_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_107_Closed_Text.style.display='none'; Codehighlighter1_31_107_Open_Image.style.display='inline'; Codehighlighter1_31_107_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_31_107_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_31_107_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img id=Codehighlighter1_65_106_Open_Image onclick="this.style.display='none'; Codehighlighter1_65_106_Open_Text.style.display='none'; Codehighlighter1_65_106_Closed_Image.style.display='inline'; Codehighlighter1_65_106_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_65_106_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_65_106_Closed_Text.style.display='none'; Codehighlighter1_65_106_Open_Image.style.display='inline'; Codehighlighter1_65_106_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()&nbsp;</span><span id=Codehighlighter1_65_106_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_65_106_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&#8220;发生错误！&#8221;);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span>&nbsp;</p>
<p><strong><span><span>1）<span> </span></span></span></strong><strong><span>取出错误信息</span></strong></p>
<p><span>onerror</span><span>处理函数提供了三种信息来确定错误确切的性质：</span></p>
<p><span>&nbsp;i）错误信息——对于给定错误，浏览器会显示同样的信息；</span></p>
<p><span>&nbsp;ii）URL</span><span>——在哪个文件中发生了错误；</span></p>
<p><span>行号——给定</span><span>URL</span><span>中发生错误的行号。</span></p>
<p><span>访问方法见如下例子：</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_31_185_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_185_Open_Text.style.display='none'; Codehighlighter1_31_185_Closed_Image.style.display='inline'; Codehighlighter1_31_185_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_31_185_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_185_Closed_Text.style.display='none'; Codehighlighter1_31_185_Open_Image.style.display='inline'; Codehighlighter1_31_185_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_31_185_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_31_185_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img id=Codehighlighter1_92_184_Open_Image onclick="this.style.display='none'; Codehighlighter1_92_184_Open_Text.style.display='none'; Codehighlighter1_92_184_Closed_Image.style.display='inline'; Codehighlighter1_92_184_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_92_184_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_184_Closed_Text.style.display='none'; Codehighlighter1_92_184_Open_Image.style.display='inline'; Codehighlighter1_92_184_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(sMessage,&nbsp;sUrl,&nbsp;sLine)&nbsp;</span><span id=Codehighlighter1_92_184_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_92_184_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>alert("发生错误！\n"&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sMessage&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;"\nURL:"&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sUrl&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;"\nLine&nbsp;Number:"&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;sLine);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">true</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p></span>&nbsp;</p>
<p><strong><span><span>2）<span> </span></span></span></strong><strong><span>图像载入错误</span></strong></p>
<p><span>window</span><span>对象并非唯一支持</span><span>onerror</span><span>事件处理函数的对象，它对图像对象也提供支持。当一个图像由于文件不存在等原因未能成功载入时，</span><span>error</span><span>事件便在这个图像上触发。让我们来看一个例子：</span></p>
<p><span>&lt;img src=&#8221;amigo.jpg&#8221; onerror=&#8221;alert(&#8216;</span><span>载入图片时发生错误</span><span>&#8217;)&#8221;/&gt;</span></p>
<p><span>上例直接在</span><span>HTML</span><span>中分配</span><span>onerror</span><span>事件处理函数。当然也可以通过脚本来分配事件处理函数，在设置图像的</span><span>src</span><span>特性前，必须等待页面完全载入，代码如下：</span></p>
<p><strong><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Image错误测试</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_93_270_Open_Image onclick="this.style.display='none'; Codehighlighter1_93_270_Open_Text.style.display='none'; Codehighlighter1_93_270_Closed_Image.style.display='inline'; Codehighlighter1_93_270_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_93_270_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_270_Closed_Text.style.display='none'; Codehighlighter1_93_270_Open_Image.style.display='inline'; Codehighlighter1_93_270_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id=Codehighlighter1_93_270_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_93_270_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img id=Codehighlighter1_134_255_Open_Image onclick="this.style.display='none'; Codehighlighter1_134_255_Open_Text.style.display='none'; Codehighlighter1_134_255_Closed_Image.style.display='inline'; Codehighlighter1_134_255_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_134_255_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_134_255_Closed_Text.style.display='none'; Codehighlighter1_134_255_Open_Image.style.display='inline'; Codehighlighter1_134_255_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;handleLoad()&nbsp;</span><span id=Codehighlighter1_134_255_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_134_255_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br><img id=Codehighlighter1_183_213_Open_Image onclick="this.style.display='none'; Codehighlighter1_183_213_Open_Text.style.display='none'; Codehighlighter1_183_213_Closed_Image.style.display='inline'; Codehighlighter1_183_213_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_183_213_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_183_213_Closed_Text.style.display='none'; Codehighlighter1_183_213_Open_Image.style.display='inline'; Codehighlighter1_183_213_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.images[</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">].onerror&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()&nbsp;</span><span id=Codehighlighter1_183_213_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_183_213_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("载入图片时发生错误！");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>document.images[</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">].src&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;"amigo.jpg";<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onload</span><span style="COLOR: #0000ff">="</span><span style="COLOR: #ff0000">handleLoad()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">img</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>注意</span></strong><span>：与</span><span>window</span><span>对象的</span><span>onerror</span><span>事件处理函数不同，</span><span>image</span><span>的</span><span>onerror</span><span>事件任何的额外信息的参数。</span></p>
<p><strong><span><span>3）<span> </span></span></span></strong><strong><span>处理语法错误</span></strong></p>
<p><span>onerror</span><span>还能处理语法错误。但有一点必须注意，事件处理函数必须是页面中第一个出现的代码，因为如果语法错误出现在设置事件处理函数之前出现，事件处理函数就没有用了。</span></p>
<p><span>注意：语法错误会完全停止代码的执行。</span></p>
<p><span>说明：使用</span><span>onerror</span><span>事件处理函数的主要的问题是，它是</span><span>BOM</span><span>的一部分，所以，没有任何标准能控制它的行为。因此，不同的浏览器使用这个事件处理错误的方式有明显的不同，</span><span>eg</span><span>，在</span><span>IE</span><span>中发生</span><span>error</span><span>事件时，正常的代码会继续执行，所有的变量和数据都保留下来，并可通过</span><span>onerror</span><span>事件处理函数访问。在</span><span>Mozilla</span><span>中，正常的代码执行都会结束，同时所有的错误发生之前的变量和数据都被销毁。</span></p>
<p>&nbsp;</p>
<p><strong><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>try&#8230;catch</span></strong><strong><span>语句</span></strong></p>
<p><span>ECMPScript</span><span>第三版，引入了</span><span>try&#8230;catch</span><span>语句。</span><span>Eg.</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">try&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.openFile1();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("成功调用openFile1方法");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;catch&nbsp;(exception)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("发生异常！");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;finally&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("try..catch测试结束!");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}</span></div>
<p></span>&nbsp;</p>
<p><span>&nbsp;</span><span>与</span><span>Java</span><span>不同，</span><span>ECMAScript</span><span>标准在</span><span>try&#8230;catch</span><span>语句中只能有一个</span><span>catch</span><span>语句，因为</span><span>JavaScript</span><span>是弱类型的语言，没办法指明</span><span>catch</span><span>子句中异常的特定类型。不管错误是什么类型，都由同一个</span><span>catch</span><span>语句处理。但</span><span>Mozilla</span><span>对其进行了扩展，可加多个</span><span>catch</span><span>语句，不推荐这样使用。</span></p>
<p><span>&nbsp;finally</span><span>用于包含无论是否有异常发生都要执行的代码，这对关闭打开的链接和释放资源很有用。</span></p>
<p><strong><span><span>1）<span> </span></span></span></strong><strong><span>嵌套</span><span>try&#8230;catch</span></strong><strong><span>语句</span></strong></p>
<p><span>用来处理</span><span>catch</span><span>子句中的错误问题，让我们来看一个例子，代码如下：</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">try&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;eval("a&nbsp;++&nbsp;b");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;catch(oException)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;alert("发生错误！");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;aError&nbsp;=&nbsp;new&nbsp;Array(1000000000000000000000000000000000000000);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;catch(exception)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("在catch子句中发生错误!");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;finally{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("已完成")<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}</span></div>
<p></span>&nbsp;</p>
<p><strong><span><span>2）<span> </span></span></span></strong><strong><span>Error</span></strong><strong><span>对象</span></strong></p>
<p><span>发生错误时，</span><span>JavaScript</span><span>有个</span><span>Error</span><span>基类用于抛出。它有两个特性：</span></p>
<p><span>&nbsp; i）name</span><span>——表示错误类型的字符串</span></p>
<p><span>&nbsp;&nbsp;ii）message</span><span>——实际的错误信息。</span></p>
<p><span>Error</span><span>对象的</span><span>name</span><span>对应于它的类，可以是如下值之一：</span></p>
<p><span>EvalError</span><span>：错误发生在</span><span>eval()</span><span>函数中；</span></p>
<p><span>RangeError</span><span>：数字值超出</span><span>JavaScript</span><span>可表示的范围；</span></p>
<p><span>ReferenceError</span><span>：使用了非法的引用；</span></p>
<p><span>SyntaxError</span><span>：在</span><span>eval()</span><span>函数调用中发生了语法错误，其他的愈发错误由浏览器报告，无法通过</span><span>try&#8230;catch</span><span>处理；</span></p>
<p><span>TypeError</span><span>：变量的类型不是预期所需的；</span></p>
<p><span>URIError</span><span>：在</span><span>encodeURI</span><span>或</span><span>decodeURI</span><span>函数发生了错误。</span></p>
<p><strong><span><span>3）<span> </span></span></span></strong><strong><span>判断错误类型</span></strong></p>
<p><span>可采取如下两种方法来判断错误类型，第一种根据异常的</span><span>name</span><span>属性判断，如下：</span></p>
<p><span>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">try&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("a&nbsp;++&nbsp;b");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;catch(oException)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(oException.name&nbsp;=&nbsp;"SyntaxError")&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("发生SyntaxError!");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;else&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("发生其他错误!");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;</span></div>
<p></span>&nbsp;</p>
<p><span>&nbsp;</span><span>第二中采用</span><span>instanceof</span><span>操作符，代码如下：</span><span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">try&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("a&nbsp;++&nbsp;b");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;catch(oException)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(oException&nbsp;instanceof&nbsp;SyntaxError)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("发生SyntaxError!");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;else&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("发生其他错误!");<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}</span></div>
<p></span>&nbsp;</p>
<p><strong><span><span>4）<span> </span></span></span></strong><strong><span>抛出异常的</span><span>throw</span></strong><strong><span>语句</span></strong></p>
<p><span>在</span><span>ECMAScript</span><span>第三版引入，用于有目的的抛出异常，抛出的错误对象可为字符串、数字、布尔值或实际的对象，也可以抛出</span><span>Error</span><span>对象（其构造函数只有一个函数，即错误信息）。</span><span>eg1. throw new Error(&#8220;</span><span>错误产生！</span><span>&#8221;);</span></p>
<p><span>eg2.<br>function addTwoNumber(a, b) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if (arguments.length &lt; 2) {</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>throw new Error("</span><span>需要传入两个数字</span><span>!");</span></p>
<p><span>}</span></p>
<p><span>} </span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">try&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;addTwoNumber(90);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;catch(oException)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(oException&nbsp;instanceof&nbsp;SyntaxError)&nbsp;{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("SyntaxError："&nbsp;+&nbsp;oException.message);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}&nbsp;else&nbsp;if&nbsp;(oException&nbsp;instanceof&nbsp;Error){<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(oException.message);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>}<br></span></div>
<img src ="http://www.blogjava.net/microlab4321/aggbug/136302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-13 10:16 <a href="http://www.blogjava.net/microlab4321/articles/136302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>