﻿<?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-前端工程师-Becket-随笔分类-网页web前端技术</title><link>http://www.blogjava.net/ebecket/category/40719.html</link><description>一路风景我一路走着,不管多么疲惫,因为一路的风景很美.......
</description><language>zh-cn</language><lastBuildDate>Fri, 02 Apr 2010 04:32:59 GMT</lastBuildDate><pubDate>Fri, 02 Apr 2010 04:32:59 GMT</pubDate><ttl>60</ttl><item><title>HTML5+CSS3 W3C规范&lt;&lt;中文版&gt;&gt;参考手册(提供下载) </title><link>http://www.blogjava.net/ebecket/archive/2010/04/02/317250.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Fri, 02 Apr 2010 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/04/02/317250.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/317250.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/04/02/317250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/317250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/317250.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/Capricornus/archive/2010/04/01/1702119.html">HTML5+CSS3 W3C规范&lt;&lt;中文版&gt;&gt;参考手册(提供下载)</a> </h1>
<div class="clear"></div>
<div class="postBody">
<p>很多人说现在IE浏览器不支持.研究没用.但我觉的.就算IE9出来了,IE6,7,8还是不支持.. 所以现在和以后效果是一样的.都是要搞些兼容性</p>
<h2><a href="http://files.cnblogs.com/Capricornus/css3.0html5.rar" target="_blank">以下是参考手册下载地址 : http://files.cnblogs.com/Capricornus/css3.0html5.rar</a></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>各大浏览器 CSS3 和 HTML5 兼容速查表</h1>
<p><a href="http://news.csdn.net/a/20100401/217692.html" target="_blank">http://news.csdn.net/a/20100401/217692.html</a></p>
<p>&nbsp;</p>
<h1>深入了解 HTML 5资源</h1>
<p><a href="http://www.comsharp.com/GetKnowledge/zh-CN/It_News_K701.aspx" target="_blank">http://www.comsharp.com/GetKnowledge/zh-CN/It_News_K701.aspx</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>以下是截图:</p>
<p><img src="http://pic002.cnblogs.com/img/skyzero110/201004/2010040111401652.jpg"  alt="" /><img src="http://pic002.cnblogs.com/img/skyzero110/201004/2010040111392941.jpg"  alt="" /></p>
<p>&nbsp;</p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/317250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-04-02 08:45 <a href="http://www.blogjava.net/ebecket/archive/2010/04/02/317250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE6/IE7/FF的CSS hack 浏览器兼容总</title><link>http://www.blogjava.net/ebecket/archive/2010/03/23/316247.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 23 Mar 2010 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/23/316247.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316247.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/23/316247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316247.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316247.html</trackback:ping><description><![CDATA[<div class="tit">IE6/IE7/FF的CSS hack 浏览器兼容总结</div>
<div class="date">2010-01-23 15:25</div>
<table style="width: 100%; table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div id="blog_text" class="cnt">
            <p>由于不同的浏览器对CSS的支持及解析结果不一样，处理的优先级不一样。针对不同的浏览器来写不同的CSS达到在不同浏览器下显示想要的效果就是css hack。先贴两个直观的对比图：</p>
            <p><span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/4f9359af5e177ac9fbed50b8.jpg" small="0"  alt="" /><br />
            <span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/9ff7d316ee3d9a2a972b43b9.jpg" small="0"  alt="" /></span></span></p>
            <p><span><span>再贴一段代码：</span></span></p>
            <span><span>
            <pre class="css"><span style="color: #cc00cc">#bgcolor</span> <span style="color: #00aa00">{</span>
            <span style="color: #000000; font-weight: bold">background</span><span style="color: #00aa00">:</span><span style="color: #993333">red</span> !important<span style="color: #00aa00">;</span> <span style="font-style: italic; color: #808080">/* Firefox 等其他浏览器 */</span>
            <span style="color: #000000; font-weight: bold">background</span><span style="color: #00aa00">:</span><span style="color: #000000; font-weight: bold">blue</span><span style="color: #00aa00">;</span> <span style="font-style: italic; color: #808080">/* IE6 */</span>
            <span style="color: #00aa00">}</span>
            <span style="color: #00aa00">*+</span>html <span style="color: #cc00cc">#bgcolor</span> <span style="color: #00aa00">{</span>
            <span style="color: #000000; font-weight: bold">background</span><span style="color: #00aa00">:</span><span style="color: #993333">green</span> !important<span style="color: #00aa00">;</span> <span style="font-style: italic; color: #808080">/* IE7 */</span>
            <span style="color: #00aa00">}</span></pre>
            <p>IE6 不认 !important, 也不认 *+html. 所以 IE6 只能是 blue.<br />
            IE7 认 !important, 也认 *+html, 优先度: (*+html + !important) &gt; !important &gt; +html. IE7 可以是 red, blue 和 green, 但 green 的优先度最高.<br />
            Firefox 和其他浏览器都认 !important. !important 优先, Firefox 可以是 red 和 blue, 但 red 优先度高。</p>
            <span><span>
            <p>下面以一个实际需求进行不同写法的实现：</p>
            <p><strong><font color="#ff0000">针对下面的html代码：</font></strong></p>
            <p>&lt;body&gt;　<br />
            　　　　&lt;div&gt;&lt;span&gt;Text&lt;/span&gt;&lt;/div&gt;　<br />
            &lt;/body&gt;</p>
            <p>　　<font color="#ff0000">写CSS代码，分别在IE6、IE7、FF下显示不同的效果：</font></p>
            <p><span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/308e4234295b017c241f1471.jpg" small="0"  alt="" /><span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/3d8e39298da7d1cc98250a72.jpg" small="0"  alt="" /><span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/2669194c075ce8cbd62afc73.jpg" small="0"  alt="" /></span></span></span></p>
            <p>　　简单说明一下：IE6的划线是在下边、IE7是中间、FF是上边。因为IE6兼容性最差(同时下划线_只有ie6支持)，IE7标准居中，FF标准最高。</p>
            <p>　　第一种方法：</p>
            <p>div{　<br />
            　　　　text-decoration:overline;　<br />
            　　　　*text-decoration:line-through;　<br />
            　　　　_text-decoration:underline;　<br />
            }</p>
            <p>　　原理是：</p>
            <p><span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/4f9359af5e177ac9fbed50b8.jpg" small="0"  alt="" /><br />
            </span></p>
            <p>　　简单地说，就是利用下面几点： </p>
            <p>　　1.各个浏览器解析CSS的语法不尽相同</p>
            <p>　　2.CSS语法规则：后面的属性覆盖前面的属性</p>
            <p>　　而这里仅仅是利用了_（IE6的专属）和*（用于IE6和IE7），接下来利用一下!important语法。</p>
            <p>　　第二种方法：</p>
            <p>　　!important语法针对的是&#8220;后面的属性覆盖前面的属性&#8221;这一语法，也就是说标识了!important的属性，是不被后面的相同属性所覆盖的，而IE6不认识这个，导致其他浏览器很容易根据这点&#8220;欺负&#8221;IE6：</p>
            <p>div{　<br />
            　　　　text-decoration:overline;　<br />
            　　　　*text-decoration:line-through!important;　<br />
            　　　　*text-decoration:underline;　<br />
            }</p>
            <p>　　原理：</p>
            <p>　　1.FF不认识*，但IE6/IE7认识</p>
            <p>　　2.IE6不认识!imprtant，但IE7认识</p>
            <p>　　<strong><font color="#ff0000">注意，顺序不能换</font></strong>，如果改为下面这样：</p>
            <p>text-decoration:overline;　<br />
            *text-decoration:underline;　<br />
            *text-decoration:line-through　!important;</p>
            <p>　　IE6和IE7都一样了。</p>
            <p>　　<strong><font color="#ff0000">IE6是支持!important属性的（该属性为CSS1语法，支持IE4+），上面的写法只是IE6的一个bug（同一个{}里面，相同属性取后者），若想要IE6支持，一般的做法是将CSS拆分</font></strong>，比如：</p>
            <p>div{<br />
            　　　　text-decoration:line-through!important;　<br />
            }<br />
            div{<br />
            　　　　text-decoration:underline;<br />
            }</p>
            <p>　　这样，在IE6下，显示的是line-through效果。</p>
            <p>　　第三种方法：</p>
            <p>　　先看一个表</p>
            <p><span><img class="blogimg" border="0" src="http://hiphotos.baidu.com/zdz8207/pic/item/9ff7d316ee3d9a2a972b43b9.jpg" small="0"  alt="" /><br />
            </span><br />
            　　为了方便记忆，在上面那个hack表增加了&#8220;针对对象&#8221;一列（关于*旁边有无空格均可，可以理解其同时也作为分隔符），需要补充的是IE7的专属写法：*+html div</p>
            <p>　　在此就利用IE6和IE7的专属写法：</p>
            <p>div{　<br />
            　　　　text-decoration:overline;　<br />
            }　<br />
            *+html　div{　<br />
            　　　　text-decoration:line-through;　<br />
            }　<br />
            *　html　div{　<br />
            　　　　text-decoration:underline;　<br />
            }</p>
            <p>　　第四种方法：</p>
            <p>div{　<br />
            　　　　text-decoration:overline;　<br />
            }　<br />
            html*div{　<br />
            　　　　text-decoration:line-through　!important;　<br />
            　　　　text-decoration:underline;　<br />
            }</p>
            <p>　　原理：利用IE6/IE7的共同专属 + IE6不懂!important</p>
            <p>　　第五种方法：</p>
            <p>body&gt;div{　<br />
            　　　　text-decoration:overline;　<br />
            　　　　*text-decoration:line-through;　<br />
            }　<br />
            div{　<br />
            　　　　text-decoration:underline;　<br />
            }</p>
            <p>　　原理：利用IE6不懂&gt;这种选择符 + 针对属性的hack。</p>
            <p>另外还有/**/或者@important等方法。</p>
            <p>为了通过W3C验证工具，需要把hack样式放到不同文件中处理。一个是针对所有浏览器的, 一个只为 IE 服务. 将所有符合 W3C 的代码写到一个里面去, 而一些 IE 中必须的, 又不能通过 W3C 验证的代码 (如: cursor:hand;) 放到另一个文件中, 再用下面的方法导入.</p>
            <p>&lt;!-- 放置所有浏览器的样式 --&gt;<br />
            &lt;link rel="stylesheet" href="style.css" type="text/css" /&gt;<br />
            &lt;!-- 只放置 IE 必须的, 而不能通过 W3C 的代码 --&gt;<br />
            &lt;!--[if IE]&gt;<br />
            &lt;link rel="stylesheet" href="style_ie.css" type="text/css" /&gt;<br />
            &lt;![endif]--&gt;</p>
            </span></span></span></span></div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/316247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-23 10:10 <a href="http://www.blogjava.net/ebecket/archive/2010/03/23/316247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web 调试代理软件Fiddler 一个http调试代理，能够记录所有的你电脑和互联网之间的http通讯</title><link>http://www.blogjava.net/ebecket/archive/2010/03/23/316237.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 23 Mar 2010 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/23/316237.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316237.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/23/316237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316237.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">微软的Fiddler 包含一个简单却功能强大的基于JScript .NET 事件脚本子系统，他非常灵活性非常棒，可以支持众多的http调试任务。Fiddler 是用C#写出来的。它还是一个http调试代理，它能 够记录所有的你电脑和互联网之间的http通讯，Fiddler 可以也可以让你检查所有的http通讯，设置断点，以及Fiddle 所有的&#8220;进出&#8221;的数据（指cookie,html,js,css等文件，这些都可以让你胡乱修改的意思）。 Fiddler 要比其他的网络调试器要更加简单，因为它仅仅暴露http通讯还有提供一个用户友好的格式。<br />
<div class="spctrl"></div>
　　Fiddler 包含一个简单却功能强大的基于JScript .NET 事件脚本子系统，他非常灵活性非常棒，可以支持众多的http调试任务。Fiddler 是用C#写出来的。<br />
<div class="spctrl"></div>
　　Fiddler支持断点调试概念，当你在软件的菜单—rules—automatic breakpoints选项选择beforerequest,或者当这些请求或响应属性能够跟目标的标准相匹配，Fiddler就能够暂停Http通讯， 情切允许修改请求和响应。这种功能对于安全测试是非常有用的，当然也可以用来做一般的功能测试，因为所有的代码路径都可以用来演习。<br />
<div class="spctrl"></div>
　　用户可以加入一个Inspector插件对象，来使用.net下的任何语言来编写Fiddler扩展。RequestInspectors 和 ResponseInspectors提供一个格式规范的，或者是被指定的（用户自定义）Http请求和响应视图。<br />
<div class="spctrl"></div>
　　通过显示所有的Http通讯，Fiddler可以轻松的演示哪些用来生成一个页面，通过统计页面（就是Fiddler左边的那个大框）用户可以很轻松的使用多选，来得到一个WEB页面的&#8220;总重量&#8221;（页面文件以及相关js,css等）你也可以很轻松得看到你请求的某个页面，总共请求了多少次，以及多少字节被转化了。<br />
<div class="spctrl"></div>
<p>　　另外，通过暴露HTTP头，用户可以看见哪些页面被允许在客户端或者是代理端进行缓存。如果要是一个响应没有包含Cache-Control 头，那么他就不会被缓存在客户端。</p>
<p>Fiddler 是微软出品的一款 Web 调试代理软件，它记录您的电脑和 Internet 之间的 HTTP(S) 数据流。Fiddler 允许你查看所有的 HTTP(S) 数据流，并且可以设置断点，改变请求和回应的数据。</p>
<p>Fiddler 是一款免费软件，可以对来自任意浏览器的访问的调试。</p>
<div class="code">Fiddler 目前可以调试并解密 HTTPS 数据流。</div>
<p><span class="chapterTitle">下载 Fiddler</span></p>
<p>您可以在本站的<a href="http://www.cftea.com/tools/" target="_blank">工具</a>中下载 Fiddler2，也可以 <a href="http://www.fiddlertool.com/" target="_blank">www.fiddlertool.com</a> 或 <a href="http://www.fiddler2.com/" target="_blank">www.fiddler2.com</a> 进行下载。</p>
<p><span class="chapterTitle">安装 Fiddler</span></p>
<p>安装 Fiddler 比较简单，双击即可安装，安装完后可以在&#8220;开始&#8221;、&#8220;程序&#8221;中找到 Fiddler。</p>
<p><span class="chapterTitle">使用 Fiddler: 目前没有中文版，下面就 Fiddler 的使用作个介绍。</span></p>
<p>首先对主界面作一个介绍，请点击查看大图。</p>
<p align="center"><a href="http://www.cftea.com/c/2007/08/Y4QW6ZTWLPZPO5RE/UWZC5ZWEZ1M05Q25_b.htm" target="_blank"><img border="0" alt="Fiddler 主界面说明" src="http://www.cftea.com/c/2007/08/Y4QW6ZTWLPZPO5RE/UWZC5ZWEZ1M05Q25.jpg" /><br />
点击查看大图</a></p>
<p><span class="itemTitle">性能和数据监测</span></p>
<p>开启抓取后，我们访问一个网页，在左边列表框中就可以得到相应的会话列表。注意，这里访问网页<span class="caution">不能使用回送地址</span>，如：127.0.0.1 或 localhost，但可以利用本机的 IP 访问，如：192.168.0.1 等。</p>
<p>选中一个会话：</p>
<ul>
    <li>在 Performance Statistics 中可以看到数据在互联网上经过的路径。
    <li>在 Session Inspector 中可以看到会话请求（发送）和回应（接收）的数据，可以分各部分查看。 </li>
</ul>
<p><span class="itemTitle">自动响应</span></p>
<p>这里是使用用户自定义的一个文件来响应用户的请求，举例说明：</p>
<ul>
    <li>创建一个文本文件，存放于 C:\foo.txt。
    <li>在 AutoResponder 中选中 Enable automatic responses。
    <li>添加一个规则，设定一个 URI，响应一项填写：C:\foo.txt。
    <li>此时我们在浏览器中访问这个 URI 时，得到的就不是 URI 的内容，而是 C:\foo.txt 的内容。 </li>
</ul>
<p><span class="itemTitle">创建请求</span></p>
<p>切换到 Request Builder 标签，输入一个网址，在 Request Headers 中输入：</p>
<div class="code">User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; SailBrowser 2005; .NET CLR 2.0.50727)<br />
Referer: http://www.fiddlertool.com/</div>
<p>此时我们再打开 Web 日志（IIS 的日志通常位于 C:\WINDOWS\system32\Logfiles，某些情况下日志可能不会立即在文件中表现出来），可以看到：日志中记录的 IE 版本是 8.0，来源（在 ASP 中可以用 Request.ServerVariables("HTTP_REFERER") 获得该值）是 http://www.fiddlertool.com/。</p>
<p>&nbsp;</p>
<p>官方网站 http://www.fiddler2.com/</p>
<p><a title="IE下查看header的软件Fiddler" href="http://www.21andy.com/blog/upload/20080125/fiddler2setup_1201266686.exe" target="_blank">下载Fiddler</a><br />
--------------------------------------------------------------------------------</p>
<p>HTTP调试工具：Fiddler介绍一（翻译）(原文地址：http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebgen/html/IE_IntroFiddler.asp)</p>
<p>这个工具我已经使用比较长时间了，对我的帮助也挺大，今天我翻译的微软的文章，让更多的朋友都来了解这个不错的工具，也是我第一次翻译文章，不恰当之处请大家大家多多指正。<br />
介绍：</p>
<p>你是不是曾经疑惑过你的web程序和IE是如何交互的？你是不是遇到过一些奇怪的而你又无法解决的性能瓶颈？你是不是对那些发送给服务器端的cookie 和那些你下载下来的被标记为可缓存的内容感到好奇？</p>
<p>Fiddler官方网站及下载地址：http://www.fiddlertool.com/Fiddler/dev/</p>
<p>微软的Fiddler能够帮助你回答以上的问题，不但如此，它还是一个http调试代理，它能 够记录所有的你电脑和互联网之间的http通讯，Fiddler 可以也可以让你检查所有的http通讯，设置断点，以及Fiddle 所有的&#8220;进出&#8221;的数据（指cookie,html,js,css等文件，这些都可以让你胡乱修改的意思）。 Fiddler 要比其他的网络调试器要更加简单，因为它仅仅暴露http通讯还有提供一个用户友好的格式。<br />
Fiddler 包含一个简单却功能强大的基于JScript .NET 事件脚本子系统，他非常灵活性非常棒，可以支持众多的http调试任务。Fiddler 是用C#写出来的。<br />
。。。。。接下来是一大段废话，关于如何安装的，只要一路next，就可以了。这段话我就跳过，直接切入正题了。</p>
<p>Running Fiddler</p>
<p>当你启动了Fiddler，程序将会把自己作为一个微软互联网服务的系统代理中去。你可以通过检查代理设置对话框来验证Fiddler是被正确地截取了web请求。操作是这样的：点击IE设置，工具，局域网设置，最后点击高级。<br />
<img border="0" hspace="10" alt="IE下查看header的软件Fiddler" vspace="10" align="center" src="http://www.21andy.com/blog/upload/20080125/12012666621.gif" /><br />
作为系统代理，所有的来自微软互联网服务（WinInet）的http请求再到达目标Web服务器的之前都会经过Fiddle，同样的，所有的Http响应都会在返回客户端之前流经Fiddler。这样，就能明白Fiddler很多作用了吧！<br />
<img border="0" hspace="10" alt="IE下查看header的软件Fiddler" vspace="10" align="center" src="http://www.21andy.com/blog/upload/20080125/12012666622.gif" /></p>
<p>当你关闭Fiddler的时候，它就会自动从系统注册表中移出，换句话说，当你关闭了Fiddler后，不会占着茅坑不拉屎。</p>
<p>下面，是一个Fillder的用户界面，大家可以参考参考其功能。<br />
<img border="0" hspace="10" alt="IE下查看header的软件Fiddler" vspace="10" align="center" src="http://www.21andy.com/blog/upload/20080125/12012666623.gif" /></p>
<h3>用Fiddler来做性能测试</h3>
<p><strong>HTTP统计视图</strong>通过显示所有的Http通讯，Fiddler可以轻松的演示哪些用来生成一个页面，通过统计页 面（就是Fiddler左边的那个大框）用户可以很轻松的使用多选，来得到一个WEB页面的&#8220;总重量&#8221;（页面文件以及相关js,css等）你也可以很轻松 得看到你请求的某个页面，总共请求了多少次，以及多少字节被转化了。<br />
<img border="0" hspace="10" alt="IE下查看header的软件Fiddler" vspace="10" align="center" src="http://www.21andy.com/blog/upload/20080125/12012666624.gif" /><br />
另外，通过暴露HTTP头，用户可以看见哪些页面被允许在客户端或者是代理端进行缓存。如果要是一个响应没有包含Cache-Control 头，那么他就不会被缓存在客户端。</p>
<p><img border="0" hspace="10" alt="IE下查看header的软件Fiddler" vspace="10" align="center" src="http://www.21andy.com/blog/upload/20080125/12012666625.gif" /></p>
<p>用Fiddler来调试</p>
<p>Fiddler支持断点调试概念，当你在软件的菜单—rules—automatic breakpoints选项选择beforerequest,或者当这些请求或响应属性能够跟目标的标准相匹配，Fiddler就能够暂停Http通讯， 情切允许修改请求和响应。这种功能对于安全测试是非常有用的，当然也可以用来做一般的功能测试，因为所有的代码路径都可以用来演习。<br />
<img border="0" hspace="10" alt="IE下查看header的软件Fiddler" vspace="10" align="center" src="http://www.21andy.com/blog/upload/20080125/12012666626.gif" /><br />
<strong>Session检查</strong>用户可以在BuilderPage项种来以手工的方式来创建一个HTTP请求（即在 Fiddler右侧的tab的第三个，RequestBUILDER），或者可以使用拖拽操作从Session列表中来移动一个已经存在的请求到 builder page 来再次执行这个请求。。。<br />
<strong>Fiddler 扩展</strong>Fiddler可以使用 .net framework来对它进行扩展。有2种为Fiddler扩展准备的基本机制：</p>
<p>自定义规则，和规则检查。</p>
<p><strong>使用脚本化的规则来扩展Fiddler</strong><br />
Fiddler支持JScript .NET引擎，它可以允许用户自动地修改Http请求和响应。这个引擎能够在可视化界面修改在FiddlerUI中的Session，可以从列表中提取你感兴趣的错误，也可以移除你不感兴趣的Session。</p>
<p>以下的示例代码演示当cookie被加载的时候把界面变成紫色。</p>
<pre>static function OnBeforeRequest(oSession:Fiddler.Session)</pre>
<pre>{</pre>
<pre>if (oSession.oRequest.headers.Exists("Cookie")){</pre>
<pre>oSession["ui-color"] = "purple";</pre>
<pre>oSession["ui-bold"] = "cookie";</pre>
<pre>}</pre>
<pre>}</pre>
<p><strong>通过加入Inspectors来扩展Fiddler</strong></p>
<p>用户可以加入一个Inspector插件对象，来使用.net下的任何语言来编写Fiddler扩展。RequestInspectors 和 ResponseInspectors提供一个格式规范的，或者是被指定的（用户自定义）Http请求和响应视图。</p>
<p>默认安装中，Fiddler加入了一下的Inspectors：</p>
<p>Request Inspectors</p>
<p>[RW] Headers—Shows request headers and status.</p>
<p>[RW] TextView—Shows the request body in a text box. （原始的请求body视图）</p>
<p>[RW] HexView—Shows the request body in a hexadecimal view. （body的16进制视图）</p>
<p>[RO] XML—Shows the request body as an XML DOM in a tree view.（以XML方式展示请求）</p>
<p>Response Inspectors</p>
<p>[RW] Transformer—Removes GZip, DEFLATE, and CHUNKED encodings for easier debugging.</p>
<p>[RW] Headers—Shows response headers and status.</p>
<p>[RW] TextView—Shows the response body in a text box.</p>
<p>[RW] HexView—Shows the response body in a hexadecimal view. （16进制视图）</p>
<p>[RO] ImageView—Shows the response body as an Image. Supports all .NET image formats.</p>
<p>[RO] XML—Shows the response body as an XML DOM in a tree view.</p>
<p>[RO] Privacy—Explains the P3P statement in the response headers, if present.（如果在响应头中有关于隐私策略的说明就展示出来）<br />
<br />
转自http://hi.baidu.com/zdz8207/blog/item/6542fe1f503c4a0c304e15c4.html</p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/316237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-23 09:41 <a href="http://www.blogjava.net/ebecket/archive/2010/03/23/316237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用js获取QueryString </title><link>http://www.blogjava.net/ebecket/archive/2010/03/22/316175.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Mon, 22 Mar 2010 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/22/316175.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316175.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/22/316175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316175.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从网上看到一些使用js获取QueryString的方法，但用起来不是很理想，所以决定自己写一个。主要原理是使用正则表达式匹配location.search中的字符串。三个主要方法：                                    方法                                    说明            ...&nbsp;&nbsp;<a href='http://www.blogjava.net/ebecket/archive/2010/03/22/316175.html'>阅读全文</a><img src ="http://www.blogjava.net/ebecket/aggbug/316175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-22 15:40 <a href="http://www.blogjava.net/ebecket/archive/2010/03/22/316175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSON in .Net</title><link>http://www.blogjava.net/ebecket/archive/2010/03/22/316171.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Mon, 22 Mar 2010 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/22/316171.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316171.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/22/316171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316171.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316171.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文PDF下载本文结构 JSON简介JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它易于编程人员阅读和编写，同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的...&nbsp;&nbsp;<a href='http://www.blogjava.net/ebecket/archive/2010/03/22/316171.html'>阅读全文</a><img src ="http://www.blogjava.net/ebecket/aggbug/316171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-22 15:31 <a href="http://www.blogjava.net/ebecket/archive/2010/03/22/316171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Google CDN服务提供的jQuery库</title><link>http://www.blogjava.net/ebecket/archive/2010/03/22/316170.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Mon, 22 Mar 2010 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/22/316170.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316170.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/22/316170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316170.html</trackback:ping><description><![CDATA[<p>jQuery，让我们控制页面元素更加方便快捷，让我们在编写js的时候不需要过多地考虑浏览器特性问题了。但是jQuery功能越强大，它本身的文件也越大。在做网站优化的时候,通常会通过优化js、css和图片文件能挤出来的几百k尺寸的下载量.</p>
<p>Google挺够意思，就提供了jQuery库，通过使用Google提供的jQuery库，Google的服务器和线路品质那自然是不在话下的。即提高了下载速度又减少了自己服务器的并发连接数。</p>
<p>用起来也很简单，直接在网页里引用Google服务器上的相关js文件就可以了。不过，如果引用多个js，就要插入多段的script。Google也提供了相应的办法，那就是google load。我们只需要在页面里引用一个js文件，就可以根据需要实时加载用到的js库了。</p>
<p>首先在页头部分加入以下这行代码： <br />
&lt; script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;</p>
<p>加载jQuery，可以这样使用： <br />
google.load("jquery","1.3.2");</p>
<p>这样我们就从Google的最近的CDN镜像上加载了jQuery 1.3.2版的js库，接下来就可以正常写js代码了。不过，即使是Google的CDN镜像，下载也毕竟是需要时间的，万一代码库还没有下载完而浏览器已经解释到了下面的代码了怎么办？我们可以设定在js库加载完以后才开始执行js： <br />
google.setOnLoadCallback(function(){//要执行的代码}); <br />
更多有关google jsapi的相关介绍和文档，可以参考：<a href="http://code.google.com/intl/zh-CN/apis/ajaxlibs/">google AJAX 库 API</a></p>
<p>除了jQuery,Google还提供供了以下这些js框架/库的API： <br />
<a href="http://item.feedsky.com/~feedsky/oophomenet/~7209513/197473294/4435341/1/documentation/index.html#jqueryUI">jQuery UI</a> <br />
<a href="http://item.feedsky.com/~feedsky/oophomenet/~7209513/197473294/4435341/1/documentation/index.html#prototype">Prototype</a> <br />
<a href="http://item.feedsky.com/~feedsky/oophomenet/~7209513/197473294/4435341/1/documentation/index.html#script_aculo_us">script.aculo.us</a> <br />
<a href="http://item.feedsky.com/~feedsky/oophomenet/~7209513/197473294/4435341/1/documentation/index.html#mootools">MooTools</a></p>
<img src ="http://www.blogjava.net/ebecket/aggbug/316170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-22 15:24 <a href="http://www.blogjava.net/ebecket/archive/2010/03/22/316170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google与Microsoft为jQuery,Prototype,MooTools等类库提供CDN服务</title><link>http://www.blogjava.net/ebecket/archive/2010/03/22/316169.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Mon, 22 Mar 2010 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/22/316169.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316169.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/22/316169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316169.html</trackback:ping><description><![CDATA[<p>以前在网站中都是这么引入jquery脚本库的：<br />
<span style="color: #ff0000">&lt;script type="text/javascript" src="/Comm/jQuery.min.js"&gt;&lt;/script&gt;</span><br />
有时还要引入其它比较大的脚本类库，如：Prototype，每次引入时<a title="柳永法(yongfa365)'Blog http://www.yongfa365.com" href="http://www.yongfa365.com/">柳永法(yongfa365)'Blog</a>都得考虑：这么大的东西客户打开网页时要多郁闷啊。</p>
<p>现在好了，Google与Microsoft为jQuery,Prototype,MooTools等类库提供CDN服务，这样一来，不在客户在哪访问网站都是通过CDN访问这些脚本，提高了加载速度，减少了加载延迟并获得更好的缓存。<br />
如：<br />
<span style="color: #ff0000">&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"&gt;&lt;/script&gt;</span><br />
推荐大家使用</p>
<p>相关链接：</p>
<p>Google:<a href="http://code.google.com/apis/ajaxlibs/" target="_blank">http://code.google.com/apis/ajaxlibs/</a><br />
Microsoft:<a href="http://www.asp.net/ajaxlibrary/cdn.ashx" target="_blank">http://www.asp.net/ajaxlibrary/cdn.ashx</a></p>
<p>Google提供的API最多，常用的他全有，像flash: swfobject</p>
<br />
引用本页地址：<a href="http://www.yongfa365.com/item/Google-Microsoft-jQuery-Prototype-MooTools-CDN.html">http://www.yongfa365.com/item/Google-Microsoft-jQuery-Prototype-MooTools-CDN.html</a> 
<img src ="http://www.blogjava.net/ebecket/aggbug/316169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-22 15:20 <a href="http://www.blogjava.net/ebecket/archive/2010/03/22/316169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中操作XML文件(读写改删全接触)-全了！</title><link>http://www.blogjava.net/ebecket/archive/2010/03/22/316134.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Mon, 22 Mar 2010 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/22/316134.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/316134.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/22/316134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/316134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/316134.html</trackback:ping><description><![CDATA[<p>已知有一个XML文件（bookstore.xml）如下：<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="gb2312"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book&nbsp;</span><span style="color: #ff0000">genre</span><span style="color: #0000ff">="fantasy"</span><span style="color: #ff0000">&nbsp;ISBN</span><span style="color: #0000ff">="2-3631-4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">Oberon's&nbsp;Legacy</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Corets,&nbsp;Eva</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5.95</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
<br />
<span style="color: red">操作<br />
<br />
</span></p>
<p><span style="color: red">1、往&lt;bookstore&gt;节点中插入一个&lt;book&gt;节点</span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">XmlDocument&nbsp;xmlDoc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XmlDocument();&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />xmlDoc.Load(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">xmlDoc.LoadXml("&lt;!--l&nbsp;version=\"1.0\"&nbsp;encoding=\"gb2312\--&gt;&lt;BOOKSTORE&gt;&lt;/BOOKSTORE&gt;");&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">XmlNode&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.SelectSingleNode(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">查找&lt;BOOKSTORE&gt;&lt;/BOOKSTORE&gt;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">XmlElement&nbsp;xe1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.CreateElement(</span><span style="color: #000000">"</span><span style="color: #000000">book</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">创建一个&lt;BOOK&gt;&lt;/BOOK&gt;节点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">xe1.SetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</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">);</span><span style="color: #008000">//</span><span style="color: #008000">设置该节点genre属性&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">xe1.SetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">ISBN</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">2-3631-4</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">设置该节点ISBN属性&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />XmlElement&nbsp;xesub1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.CreateElement(</span><span style="color: #000000">"</span><span style="color: #000000">title</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />xesub1.InnerText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">CS从入门到精通</span><span style="color: #000000">"</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">设置文本节点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">xe1.AppendChild(xesub1);</span><span style="color: #008000">//</span><span style="color: #008000">添加到&lt;BOOK&gt;&lt;/BOOK&gt;节点中&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">XmlElement&nbsp;xesub2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.CreateElement(</span><span style="color: #000000">"</span><span style="color: #000000">author</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />xesub2.InnerText&nbsp;</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;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />xe1.AppendChild(xesub2);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />XmlElement&nbsp;xesub3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.CreateElement(</span><span style="color: #000000">"</span><span style="color: #000000">price</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />xesub3.InnerText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">58.3</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />xe1.AppendChild(xesub3);&nbsp;&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />root.AppendChild(xe1);</span><span style="color: #008000">//</span><span style="color: #008000">添加到&lt;BOOKSTORE&gt;&lt;/BOOKSTORE&gt;节点中&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">xmlDoc.Save(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore.xml</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<br />
结果为：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="gb2312"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book&nbsp;</span><span style="color: #ff0000">genre</span><span style="color: #0000ff">="fantasy"</span><span style="color: #ff0000">&nbsp;ISBN</span><span style="color: #0000ff">="2-3631-4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">Oberon's&nbsp;Legacy</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Corets,&nbsp;Eva</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5.95</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book&nbsp;</span><span style="color: #ff0000">genre</span><span style="color: #0000ff">="李赞红"</span><span style="color: #ff0000">&nbsp;ISBN</span><span style="color: #0000ff">="2-3631-4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">CS从入门到精通</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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">候捷</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">58.3</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span></div>
<br />
<br />
<br />
<span style="color: red">2.修改节点：将genre属性值为&#8220;李赞红&#8220;的节点的genre值改为&#8220;update李赞红&#8221;，将该节点的子节点&lt;author&gt;的文本修改为&#8220;亚胜&#8221;。<br />
<br />
</span>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">XmlNodeList&nbsp;nodeList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.SelectSingleNode(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore</span><span style="color: #000000">"</span><span style="color: #000000">).ChildNodes;</span><span style="color: #008000">//</span><span style="color: #008000">获取bookstore节点的所有子节点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(XmlNode&nbsp;xn&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;nodeList)</span><span style="color: #008000">//</span><span style="color: #008000">遍历所有子节点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;XmlElement&nbsp;xe&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(XmlElement)xn;</span><span style="color: #008000">//</span><span style="color: #008000">将子节点类型转换为XmlElement类型&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(xe.GetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</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">)</span><span style="color: #008000">//</span><span style="color: #008000">如果genre属性值为&#8220;李赞红&#8221;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xe.SetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">update李赞红</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">则修改该属性为&#8220;update李赞红&#8221;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlNodeList&nbsp;nls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xe.ChildNodes;</span><span style="color: #008000">//</span><span style="color: #008000">继续获取xe子节点的所有子节点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(XmlNode&nbsp;xn1&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;nls)</span><span style="color: #008000">//</span><span style="color: #008000">遍历&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlElement&nbsp;xe2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(XmlElement)xn1;</span><span style="color: #008000">//</span><span style="color: #008000">转换类型&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(xe2.Name&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">author</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #008000">//</span><span style="color: #008000">如果找到&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xe2.InnerText&nbsp;</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">;</span><span style="color: #008000">//</span><span style="color: #008000">则修改&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">找到退出来就可以了&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
xmlDoc.Save(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore.xml</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">保存。</span></div>
<br />
结果：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="gb2312"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book&nbsp;</span><span style="color: #ff0000">genre</span><span style="color: #0000ff">="fantasy"</span><span style="color: #ff0000">&nbsp;ISBN</span><span style="color: #0000ff">="2-3631-4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&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">Oberon's&nbsp;Legacy</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Corets,&nbsp;Eva</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5.95</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book&nbsp;</span><span style="color: #ff0000">genre</span><span style="color: #0000ff">="update李赞红"</span><span style="color: #ff0000">&nbsp;ISBN</span><span style="color: #0000ff">="2-3631-4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&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">CS从入门到精通</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">亚胜</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">58.3</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<br />
<br />
<br />
<span style="color: red">3、删除 &lt;book genre="fantasy" ISBN="2-3631-4"&gt;节点的genre属性，删除 &lt;book genre="update李赞红" ISBN="2-3631-4"&gt;节点。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">XmlNodeList&nbsp;xnl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.SelectSingleNode(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore</span><span style="color: #000000">"</span><span style="color: #000000">).ChildNodes;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(XmlNode&nbsp;xn&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;xnl)&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;XmlElement&nbsp;xe&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(XmlElement)xn;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(xe.GetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">fantasy</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xe.RemoveAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">删除genre属性&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(xe.GetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">update李赞红</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xe.RemoveAll();</span><span style="color: #008000">//</span><span style="color: #008000">删除该节点的全部内容&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;<br />
xmlDoc.Save(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore.xml</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<br />
结果<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="gb2312"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book&nbsp;</span><span style="color: #ff0000">ISBN</span><span style="color: #0000ff">="2-3631-4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&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">Oberon's&nbsp;Legacy</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Corets,&nbsp;Eva</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">author</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5.95</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">price</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">book</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bookstore</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
<br />
<br />
<br />
4、显示所有数据。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">XmlNode&nbsp;xn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xmlDoc.SelectSingleNode(</span><span style="color: #000000">"</span><span style="color: #000000">bookstore</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
XmlNodeList&nbsp;xnl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xn.ChildNodes;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(XmlNode&nbsp;xnf&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;xnl)&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;XmlElement&nbsp;xe&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(XmlElement)xnf;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(xe.GetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">genre</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #008000">//</span><span style="color: #008000">显示属性值&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(xe.GetAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">ISBN</span><span style="color: #000000">"</span><span style="color: #000000">));&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;XmlNodeList&nbsp;xnf1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;xe.ChildNodes;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(XmlNode&nbsp;xn2&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;xnf1)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(xn2.InnerText);</span><span style="color: #008000">//</span><span style="color: #008000">显示子节点点文本&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;<br />
</span></div>
<br />
<br />
参考资料来源：<br />
<a href="http://www.yongfa365.com/item/CZhongCaoZuoXMLWenJianDuXieGaiShanQuanJieChuGenQiTaYuYanCaoZuoXMLChaBuDuoYiYang.html">http://www.yongfa365.com/item/CZhongCaoZuoXMLWenJianDuXieGaiShanQuanJieChuGenQiTaYuYanCaoZuoXMLChaBuDuoYiYang.html</a></span>
<img src ="http://www.blogjava.net/ebecket/aggbug/316134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-22 11:18 <a href="http://www.blogjava.net/ebecket/archive/2010/03/22/316134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非常有用的JS事件功能(转) </title><link>http://www.blogjava.net/ebecket/archive/2010/03/01/314125.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Sun, 28 Feb 2010 16:06:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/03/01/314125.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/314125.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/03/01/314125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/314125.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/314125.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/tishifu/archive/2008/04/02/1134313.html">非常有用的JS事件功能(转)</a> </h1>
<div class="clear"></div>
<div class="postBody">1&nbsp;&gt;屏蔽功能类<br />
<br />
1.1&nbsp;屏蔽键盘所有键<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;document.onkeydown(){<br />
&nbsp;&nbsp;&nbsp;event.keyCode&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;event.returnvalue&nbsp;=&nbsp;false;<br />
}<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
1.2&nbsp;屏蔽鼠标右键<br />
<br />
在body标签里加上oncontextmenu=self.event.returnvalue=false<br />
<br />
或者<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;document.oncontextmenu()&nbsp;<br />
{&nbsp;<br />
&nbsp;&nbsp;return&nbsp;false;&nbsp;<br />
}&nbsp;<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
function&nbsp;nocontextmenu()<br />
{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(document.all)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.cancelBubble=true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnvalue=false;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
或者<br />
<br />
&lt;body&nbsp;onmousedown="rclick()"&nbsp;oncontextmenu=&nbsp;"nocontextmenu()"&gt;<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;rclick()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(document.all)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(event.button&nbsp;==&nbsp;2){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnvalue=false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
<br />
1.3&nbsp;屏蔽&nbsp;Ctrl+N、Shift+F10、F5刷新、退格键<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
&nbsp;&nbsp;//屏蔽鼠标右键、Ctrl+N、Shift+F10、F5刷新、退格键<br />
function&nbsp;window.onhelp(){return&nbsp;false}&nbsp;//屏蔽F1帮助<br />
function&nbsp;KeyDown(){<br />
&nbsp;&nbsp;if&nbsp;((window.event.altKey)&amp;&amp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((window.event.keyCode==37)||&nbsp;&nbsp;&nbsp;//屏蔽&nbsp;Alt+&nbsp;方向键&nbsp;&#8592;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(window.event.keyCode==39))){&nbsp;&nbsp;//屏蔽&nbsp;Alt+&nbsp;方向键&nbsp;&#8594;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("不准你使用ALT+方向键前进或后退网页！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnvalue=false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;注：这还不是真正地屏蔽&nbsp;Alt+&nbsp;方向键，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为&nbsp;Alt+&nbsp;方向键弹出警告框时，按住&nbsp;Alt&nbsp;键不放，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用鼠标点掉警告框，这种屏蔽方法就失效了。以后若<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有哪位高手有真正屏蔽&nbsp;Alt&nbsp;键的方法，请告知。*/<br />
<br />
&nbsp;&nbsp;if&nbsp;((event.keyCode&nbsp;==&nbsp;8)&nbsp;&amp;&amp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(event.srcElement.type&nbsp;!=&nbsp;"text"&nbsp;&amp;&amp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.srcElement.type&nbsp;!=&nbsp;"textarea"&nbsp;&amp;&amp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.srcElement.type&nbsp;!=&nbsp;"password")&nbsp;||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//屏蔽退格删除键&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(event.keyCode==116)||&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;&nbsp;//屏蔽&nbsp;F5&nbsp;刷新键<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(event.ctrlKey&nbsp;&amp;&amp;&nbsp;event.keyCode==82)){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Ctrl&nbsp;+&nbsp;R<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.keyCode=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnvalue=false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if&nbsp;((event.ctrlKey)&amp;&amp;(event.keyCode==78))&nbsp;&nbsp;&nbsp;//屏蔽&nbsp;Ctrl+n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnvalue=false;<br />
&nbsp;&nbsp;if&nbsp;((event.shiftKey)&amp;&amp;(event.keyCode==121))&nbsp;//屏蔽&nbsp;shift+F10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.returnvalue=false;<br />
&nbsp;&nbsp;if&nbsp;(window.event.srcElement.tagName&nbsp;==&nbsp;"A"&nbsp;&amp;&amp;&nbsp;window.event.shiftKey)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.event.returnvalue&nbsp;=&nbsp;false;&nbsp;&nbsp;//屏蔽&nbsp;shift&nbsp;加鼠标左键新开一网页<br />
&nbsp;&nbsp;if&nbsp;((window.event.altKey)&amp;&amp;(window.event.keyCode==115)){&nbsp;//屏蔽Alt+F4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;}<br />
&nbsp;&nbsp;}<br />
&nbsp;/*&nbsp;另外可以用&nbsp;window.open&nbsp;的方法屏蔽&nbsp;IE&nbsp;的所有菜单<br />
第一种方法：<br />
&nbsp;&nbsp;window.open("你的.htm",&nbsp;"","toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=yes,status=no,top=0,left=0")<br />
第二种方法是打开一个全屏的页面：<br />
&nbsp;&nbsp;window.open("你的.asp",&nbsp;"",&nbsp;"fullscreen=yes")<br />
&nbsp;*/<br />
//--&gt;<br />
&lt;/script&gt;<br />
<br />
1.4屏蔽浏览器右上角&#8220;最小化&#8221;&#8220;最大化&#8221;&#8220;关闭&#8221;键<br />
<br />
&lt;script&nbsp;language=javascript&gt;<br />
function&nbsp;window.onbeforeunload()<br />
{<br />
&nbsp;&nbsp;if(event.clientX&gt;document.body.clientWidth&amp;&amp;event.clientY&lt;0||event.altKey)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;window.event.returnvalue&nbsp;=&nbsp;"";<br />
&nbsp;&nbsp;}<br />
}<br />
&lt;/script&gt;<br />
<br />
或者使用全屏打开页面<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
window.open(www.32pic.com,"32pic","fullscreen=3,height=100,&nbsp;width=400,&nbsp;top=0,&nbsp;left=0,&nbsp;toolbar=no,&nbsp;menubar=no,&nbsp;scrollbars=no,&nbsp;resizable=no,location=no,&nbsp;status=no");<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
注：在body标签里加上onbeforeunload="javascript:return&nbsp;false"（使不能关闭窗口）<br />
<br />
1.5屏蔽F5键<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;document.onkeydown()&nbsp;<br />
{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;event.keyCode==116)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.keyCode&nbsp;=&nbsp;0;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.cancelBubble&nbsp;=&nbsp;true;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
1.6屏蔽IE后退按钮<br />
<br />
在你链接的时候用&nbsp;&lt;a&nbsp;href="javascript:location.replace(url)"&gt;<br />
<br />
1.7屏蔽主窗口滚动条<br />
<br />
在body标签里加上&nbsp;style="overflow-y:hidden"<br />
<br />
1.8&nbsp;屏蔽拷屏,不断地清空剪贴板<br />
<br />
在body标签里加上onload="setInterval('clipboardData.setData(\'Text\',\'\')',100)"<br />
<br />
1.9&nbsp;屏蔽网站的打印功能<br />
<br />
&lt;style&gt;<br />
@media&nbsp;print&nbsp;{<br />
&nbsp;&nbsp;&nbsp;*&nbsp;{&nbsp;display:&nbsp;none&nbsp;}<br />
}<br />
&lt;/style&gt;<br />
<br />
1.10&nbsp;屏蔽IE6.0&nbsp;图片上自动出现的保存图标<br />
<br />
方法一：<br />
&lt;META&nbsp;HTTP-EQUIV="imagetoolbar"&nbsp;CONTENT="no"&gt;<br />
方法二：<br />
&lt;img&nbsp;galleryimg="no"&gt;<br />
<br />
1.11&nbsp;屏蔽页中所有的script<br />
<br />
&lt;noscrript&gt;&lt;/noscript&gt;<br />
<br />
2&nbsp;&gt;表单提交验证类&nbsp;<br />
<br />
<br />
2.1&nbsp;表单项不能为空<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;CheckForm()<br />
{<br />
if&nbsp;(document.form.name.value.length&nbsp;==&nbsp;0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;alert("请输入您姓名!");<br />
&nbsp;&nbsp;&nbsp;document.form.name.focus();<br />
&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
}<br />
&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />
}<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
2.2&nbsp;比较两个表单项的值是否相同<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;CheckForm()<br />
if&nbsp;(document.form.PWD.value&nbsp;!=&nbsp;document.form.PWD_Again.value)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;alert("您两次输入的密码不一样！请重新输入.");<br />
&nbsp;&nbsp;&nbsp;document.ADDUser.PWD.focus();<br />
&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
}<br />
&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />
}<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
2.3&nbsp;表单项只能为数字和"_",用于电话/银行帐号验证上,可扩展到域名注册等<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;isNumber(String)<br />
{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;Letters&nbsp;=&nbsp;"1234567890-";&nbsp;//可以自己增加可输入值<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;c;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(String.charAt(&nbsp;0&nbsp;)=='-')<br />
&nbsp;return&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;String.charAt(&nbsp;String.length&nbsp;-&nbsp;1&nbsp;)&nbsp;==&nbsp;'-'&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;String.length;&nbsp;i&nbsp;++&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;String.charAt(&nbsp;i&nbsp;);<br />
&nbsp;&nbsp;&nbsp;if&nbsp;(Letters.indexOf(&nbsp;c&nbsp;)&nbsp;&lt;&nbsp;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />
}<br />
function&nbsp;CheckForm()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!&nbsp;isNumber(document.form.TEL.value))&nbsp;{<br />
&nbsp;&nbsp;alert("您的电话号码不合法！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.form.TEL.focus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
}<br />
return&nbsp;true;<br />
}<br />
--&gt;<br />
&lt;/script&gt;<br />
<br />
<br />
2.4&nbsp;表单项输入数值/长度限定<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
function&nbsp;CheckForm()&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(document.form.count.value&nbsp;&gt;&nbsp;100&nbsp;||&nbsp;document.form.count.value&nbsp;&lt;&nbsp;1)<br />
{<br />
&nbsp;alert("输入数值不能小于零大于100!");<br />
&nbsp;document.form.count.focus();<br />
&nbsp;return&nbsp;false;<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(document.form.MESSAGE.value.length&lt;10)<br />
{<br />
&nbsp;alert("输入文字小于10!");<br />
&nbsp;document.form.MESSAGE.focus();<br />
&nbsp;return&nbsp;false;<br />
}<br />
return&nbsp;true;<br />
}<br />
//--&gt;<br />
&lt;/script&gt;<br />
<br />
2.5&nbsp;中文/英文/数字/邮件地址合法性判断<br />
<br />
&lt;SCRIPT&nbsp;LANGUAGE="javascript"&gt;<br />
&lt;!--<br />
<br />
function&nbsp;isEnglish(name)&nbsp;//英文值检测<br />
{<br />
&nbsp;if(name.length&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;name.length;&nbsp;i++)&nbsp;{<br />
&nbsp;&nbsp;if(name.charCodeAt(i)&nbsp;&gt;&nbsp;128)<br />
&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;}<br />
&nbsp;return&nbsp;true;<br />
}<br />
<br />
function&nbsp;isChinese(name)&nbsp;//中文值检测<br />
{<br />
&nbsp;if(name.length&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;name.length;&nbsp;i++)&nbsp;{<br />
&nbsp;&nbsp;if(name.charCodeAt(i)&nbsp;&gt;&nbsp;128)<br />
&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />
&nbsp;}<br />
&nbsp;return&nbsp;false;<br />
}<br />
<br />
function&nbsp;isMail(name)&nbsp;//&nbsp;E-mail值检测<br />
{<br />
&nbsp;if(!&nbsp;isEnglish(name))<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;i&nbsp;=&nbsp;name.indexOf("@");<br />
&nbsp;j&nbsp;=&nbsp;name.lastIndexOf("@");<br />
&nbsp;if(i&nbsp;==&nbsp;-1)<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;if(i&nbsp;!=&nbsp;j)<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;if(i&nbsp;==&nbsp;name.length)<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;return&nbsp;true;<br />
}<br />
<br />
function&nbsp;isNumber(name)&nbsp;//数值检测<br />
{<br />
&nbsp;if(name.length&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;name.length;&nbsp;i++)&nbsp;{<br />
&nbsp;&nbsp;if(name.charAt(i)&nbsp;&lt;&nbsp;"0"&nbsp;||&nbsp;name.charAt(i)&nbsp;&gt;&nbsp;"9")<br />
&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;}<br />
&nbsp;return&nbsp;true;<br />
}<br />
<br />
function&nbsp;CheckForm()<br />
{<br />
&nbsp;if(!&nbsp;isMail(form.Email.value))&nbsp;{<br />
&nbsp;&nbsp;alert("您的电子邮件不合法！");<br />
&nbsp;&nbsp;form.Email.focus();<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;}<br />
&nbsp;if(!&nbsp;isEnglish(form.name.value))&nbsp;{<br />
&nbsp;&nbsp;alert("英文名不合法！");<br />
&nbsp;&nbsp;form.name.focus();<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;}<br />
&nbsp;if(!&nbsp;isChinese(form.cnname.value))&nbsp;{<br />
&nbsp;&nbsp;alert("中文名不合法！");<br />
&nbsp;&nbsp;form.cnname.focus();<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;}<br />
&nbsp;if(!&nbsp;isNumber(form.PublicZipCode.value))&nbsp;{<br />
&nbsp;&nbsp;alert("邮政编码不合法！");<br />
&nbsp;&nbsp;form.PublicZipCode.focus();<br />
&nbsp;&nbsp;return&nbsp;false;<br />
&nbsp;}<br />
&nbsp;return&nbsp;true;<br />
}<br />
//--&gt;<br />
&lt;/SCRIPT&gt;<br />
<br />
2.6&nbsp;限定表单项不能输入的字符<br />
<br />
&lt;script&nbsp;language="javascript"&gt;<br />
&lt;!--<br />
<br />
function&nbsp;contain(str,charset)//&nbsp;字符串包含测试函数<br />
{<br />
&nbsp;&nbsp;var&nbsp;i;<br />
&nbsp;&nbsp;for(i=0;i&lt;charset.length;i++)<br />
&nbsp;&nbsp;if(str.indexOf(charset.charAt(i))&gt;=0)<br />
&nbsp;&nbsp;return&nbsp;true;<br />
&nbsp;&nbsp;return&nbsp;false;<br />
}<br />
<br />
function&nbsp;CheckForm()<br />
{<br />
&nbsp;if&nbsp;((contain(document.form.NAME.value,&nbsp;"%\(\)&gt;&lt;"))&nbsp;||&nbsp;(contain(document.form.MESSAGE.value,&nbsp;"%\(\)&gt;&lt;")))<br />
{<br />
&nbsp;&nbsp;alert("输入了非法字符");<br />
&nbsp;&nbsp;document.form.NAME.focus();<br />
&nbsp;&nbsp;return&nbsp;false;<br />
}<br />
&nbsp;&nbsp;return&nbsp;true;<br />
}<br />
//--&gt;<br />
&lt;/script&gt;<br />
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/314125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-03-01 00:06 <a href="http://www.blogjava.net/ebecket/archive/2010/03/01/314125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无阻塞下载脚本</title><link>http://www.blogjava.net/ebecket/archive/2010/02/28/314124.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Sun, 28 Feb 2010 15:54:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/02/28/314124.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/314124.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/02/28/314124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/314124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/314124.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/wlstyle/archive/2009/09/13/1565923.html">无阻塞下载脚本</a> </h1>
<div class="clear"></div>
<div class="postBody">原文作者：Nicholas C. Zakas<br />
原文链接：<a href="http://www.nczonline.net/blog/2009/06/23/loading-javascript-without-blocking/">Loading JavaScript without blocking</a><br />
译文：<br />
我看了Steve Souder的博文<a id="xt35" title="scripts without blocking" href="http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/">scripts without blocking</a> 在这篇博文中他提到动态的创建一个script元素同时为他分配一个src的属性会促成下载这个js文件而不阻塞其他的下载或者页面的其他进程。他的博文 缺少一个如何实现这种方式的例子。所以我想我。我想大多数开发者试图使用javascript脚本库来实现这种需求（我首先想到了YUI的Get utility）但是很有必要讨论一下这个技术的本质。<br />
无阻塞的加载脚本的基本实现方式非常直接。<br />
var scripts=document.createElement('script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.type="text/javascript";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.src="file.js";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(scripts);<br />
看 起来就是这么的简单，你创建了一个新的dom元素，给他它分配相应的属性同时把它添加到页面中。这段代码有两个方面需要注意。javascript文件直 到script节点添加到document中才开始下载。这一点和动态的创建一个img元素，为这个元素分配一个src属性这时候加载已经开始即使该节点 没有添加到document中。第二点需要注意的是你既能在&lt;head&gt;中添加该script节点又能在&lt;body&gt;中添加。这 个无关紧要。这一切的结果就是动态的加载一个javascript文件而不阻塞页面。<br />
<br />
当然，你可能同时也想知道什么时候 javascript文件完全被加载好和执行，同时这也是事情复杂之所在。大多数modern的浏览器（firefox ,safari,opera,chrome）对于scrpt元素有一个load的事件句柄。这是一个确定脚本是否加载好的简单方式。<br />
//Firefox, Safari, Chrome, and Opera<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var scripts=document.createElement('script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.type="text/javascript";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.src="file.js";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scripts.onload=function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('Script is loaded!')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
document.body.appendChild(scripts);<br />
真 正的问题出现在ie中，ie使用readyState属性表明script所处于的状态readystatechange事件句柄表明属性改变的时间。在 这里readyState不和xmlHttpRequest对象中一样,这里一系列的状态值不是一个数字。在这里，readyState是五个可能是属性 值。<br />
*&#8220;uninitialized&#8221; 原始的状态。<br />
*"loading"下载开始<br />
*"loaded"下载完成<br />
*"interactive"数据处在一种不完全可用<br />
*"complete"所有的数据都可以被使用<br />
即 使MSDN documentation表示这些是readyState可用的值，实际上,你不可能看到所有的状态。该文档同时说明其他的元素也支持 readyState同时留给我们一个相当晦涩对于readyState期望值的描述：一个对象的state首先被初始化为unintialized，然 后是loading，当数据加载完成，状态变为loaded然后是interactive最后是complete状态。<br />
<br />
对象所有经历的状态取决于这个对象。一个对象可以跳过某个状态（比如说,interactive）如果这个状态没有被应到到这个对象。<br />
更 奇怪的是最后的状态不总是complete。有些时候，readState停止在loaded状态而不过渡到complete状态。同时有些时候会跳过 loaded状态。最好的解决方式是检查两个readState值同时在两个事件中移除事件处理这样可以确保你不会处理两次下载。<br />
var scripts=document.createElement('script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.type="text/javascript";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.src="file.js";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(scripts);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scripts.onreadystatechange=function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(readyState=="loaded"||readyState=="complete"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scripts.onreadystatechange=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('script is loaded!')<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(scripts);<br />
你能完美的封装这两个解决方式从而创造一个跨浏览器的函数动态加载脚本。<br />
function loadScript(url,callback){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var script=document.createElement('script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.type="text/javascript";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(script.readyState){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.onreadystatechange=function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(readyState=="loaded" || readyState=="complete"){<br />
&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; script.onreadystatechange=null;<br />
&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; callback();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.onload=function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callback();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script.src=url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.appendChild(script);<br />
使用这个函数的时候，只是传入一个脚本所在的地址然后在加载好之后调用一个回调函数。<br />
loadScript("http://yui.yahooapis.com/2.7.0/build/yahoo/yahoo-min.js",<br />
&nbsp;&nbsp;&nbsp; function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; YAHOO.namespace("mystuff");<br />
<br />
&nbsp;&nbsp;&nbsp; //more...<br />
});<br />
<br />
以这种方式加载脚本避免脚本阻塞页面中其他资源的下载或者阻止渲染。对于提高性能这是一种相当有用的技术。真正cool的事情是YUI3构建了一个完美的无阻塞下载方式。所有你需要做的就是下载一个大约20kb的seed文件同时说明你需要下载的其他资源文件。比如这样<br />
YUI().use("dom", function(Y){<br />
&nbsp;&nbsp;&nbsp; Y.DOM.addClass(document.body, "active");<br />
});<br />
<br />
实际上，YUI构建了一个合适的url以便下载dom模块，当代码可执行时自动执行回调函数。这样通过异步下载其余的脚本文件从而优化了整个页面下载的时间。<br />
无阻塞的下载一个脚本是一个需要明白的重要技术同时在关注页面下载性能的web应用程序中应用。javascript 阻塞是整个用户体验降低，但是我们已经可以对阻塞说不了。<br />
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/314124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-02-28 23:54 <a href="http://www.blogjava.net/ebecket/archive/2010/02/28/314124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Douglas Crockford谈Ajax性能</title><link>http://www.blogjava.net/ebecket/archive/2010/02/28/314123.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Sun, 28 Feb 2010 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/02/28/314123.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/314123.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/02/28/314123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/314123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/314123.html</trackback:ping><description><![CDATA[<div class="post hentry category-frontend tag-ajax tag-performance">
<h3 id="post-23"><a title="Douglas Crockford谈Ajax性能的永久链接" href="http://hikejun.com/blog/?p=23" rel="bookmark">Douglas Crockford谈Ajax性能</a></h3>
<small>2008年12月25日，星期四</small>
<div class="entry">
<div>这是Douglas Crockford在圣诞节前的一个讲座。我觉得对于前端工程师来说算是一个&#8220;新年大片&#8221;。英文好的建议直接去看原文<a title="http://ericmiraglia.com/blog/?p=140" href="http://ericmiraglia.com/blog/?p=140">http://ericmiraglia.com/blog/?p=140</a>感谢Eric Miraglia提供了完整的文字记录。</div>
<div></div>
<div>Crock先用&lt;<a title="记忆碎片" href="http://www.douban.com/subject/1304447/">记忆碎片</a><span> </span>&gt;这部电影作为引子。我还没看过，一定要找来看看。</div>
<div></div>
<div>如 果要向不太了解JSON的解释JSON为什么好Crock这句话说的很清楚&#8220;A JSON message is less work for the server to generate, it moves much faster on the wire because it&#8217;s smaller, it&#8217;s less work for the browser to parse and render than an HTML document.&#8221;</div>
<div></div>
<div>&#8220;The page is an application with a data connection to a server.&#8221;Crock对Ajax Revolution标题的注解。他提到&#8220;the client dose not need a copy of the database. it just needs, at any moment, just enough information to serve the user&#8221;，后端把所有数据都交给前端处理，后端是省事了，而浏览器端的性能则变的极差。&#8220;the client and the server are in a dialog, and we make the messages between them be as small as possible&#8221;，这是一个关键原则。just-in-time data delivery(按需传输数据)。</div>
<div></div>
<div>这 些道理其实尽人皆知，但在设计复杂的应用时，在进行多人协作的项目时，仍然会犯这样的错误。为什么？因为如果真的要实现一个客户端和服务器端的高效对话， 服务器端的设计就会变的复杂，我充分理解后端工程师也要考虑他们的问题。但为了更高效率，后端多花一些心思是值得的，因为目前浏览器还是一个非常低效的应 用平台(这也是Google推出Chrome的原因)，存在显著的安全问题和性能问题。</div>
<div></div>
<div>Crock举的这个memoizer(缓存器)的例子非常经典:</div>
<div>var fibonacci = function(n){</div>
<div>return n &lt; 2 ? n : </div>
<div>fibonacci(n - 1) + fibonacci(n - 2);</div>
<div>};</div>
<div>fibonacci(40);</div>
<div>执行自己 331,160,280 次</div>
<div></div>
<div>var memoizer = function(memo, fundamental){</div>
<div>var shell = function(n){</div>
<div>var result = memo[n];</div>
<div>if(typeof result !== &#8216;number&#8217;){</div>
<div>result = fundamental(shell, n);</div>
<div>memo[n] = result;</div>
<div>}</div>
<div>return result;</div>
<div>}</div>
<div>return shell;</div>
<div>}</div>
<div></div>
<div>var fibonacci = memoizer([0, 1], function(recur, n){</div>
<div>return recur(n - 1) + recur(n - 2);</div>
<div>});</div>
<div>优化后的程序仅执行了38次。&#8221;the key to optimization is<span> </span><strong>work avoidance</strong>.&#8221; (优化的关键是&#8220;逃避工作&#8221;的技巧)</div>
<p>
<div>Crock提到两种优化思路：streamline和special casing</div>
<p>streamline(简 化为使效率更高)：更换算法（选择更好的算法）、逃避工作、清除冗余代码（项目反复修改每次只是增加，往往忽略清除没用的代码）而且&#8221;These things are always good to do&#8221;这些事情应该一直去做而不是等到出现性能问题之后再解决。
<div></div>
<div>special casing理解成特别包装更好一些。为了解决某些特别需求在原有代码基础上所做的包装，优其是对公共组件。会导致冗余代码越来越多，增加代码的 size，同时还会增加更多的测试路径（如果代码要进行白盒测试，无疑测试成本将增加很多）。要知道产品的需求永远是善变的。处理这种特殊需求可以写一些 &#8220;适配器&#8221;或&#8220;桥接器&#8221;，不用的话就直接拿掉。
<p>&nbsp;</p>
</div>
<div>&#8220;Avoid unnecessary displays or animation&#8221;很多产品经理认为花哨的交互就是好的用户体验，或者就是认为它够shiny，殊不知它带来的负面影响远比它的作用要大的多。 Crock是这么说的&#8220;A &#8216;wow&#8217; effect is definitely worthwhile if it improves the user&#8217;s productivity, or improves the value of the experience to user.If it&#8217;s there just to show that we can do that, I think it&#8217;sa waste of our time, it&#8217;sa waste of the user&#8217;s time.&#8221;（译：如果这样做能提高用户的生产力或提升用户体验的价值，一个&#8216;喔噻&#8217;的效果是价得的。但如果它的存在只是为了表明，我们能够做到这一点， 我认为这是浪费我们的时间，这是浪费用户的时间）</div>
<div></div>
<div>重 点解决影响最大的性能问题。看似费话，其实在开发中避重就轻的事没少干。关键首先要准确的判断出哪些环节是最大的症结所在。The bottleneck tends to be the DOM interface — DOM is a really inefficient API.(译: 瓶颈倾向于DOM接囗 - DOM是一个相当低效的API)，还会有reflow计算的问题。&#8220;So touch the DOM lightly, if you can.&#8221;怎么才能&#8220;touch lightly&#8221;，Crock告诉我们两个技巧：一个是在创建的结点添加到DOM树上之前对其进行操作，这样不会有回流计算的问题。二是用 innerHTML，它只会跟DOM发生一次关系。</div>
<div>var d = document.createElement(&#8221;div&#8221;);</div>
<div>d.style.height = &#8216;100px&#8217;;</div>
<div>d.style.border = &#8216;1px solid red&#8217;;</div>
<div>d.style.color = &#8216;green&#8217;;</div>
<div>&#8230;(该办的事先办完)&#8230;</div>
<div>//最后再添加到dom树中</div>
<div>document.body.appendChild(d);</div>
<p>
<div>&#8220;Don&#8217;t Tune For Quirks&#8221;不要调那些浏览器的怪异问题。建议首先是尽量绕开这些quirks，虽然通过一些技巧可以解决这些问题，但也许在其它浏览器上性能就会变 差。而且当浏览器升级后修复了这个问题，之前所做的优化可能会变得更糟。Crock建议不做短期优化。</div>
<div></div>
<div>短短三十多分钟的讲座细细品味的话可以引出很多思考。</div>
<div>简单总结一下：</div>
<div>一是客户端要轻。程序不要臃肿，不要把所有数据都交给前端处理</div>
<div>二是代码是基础。寻求更好的算法，更好的设计模式</div>
<div>三是借住工具，不凭直觉</div>
<div>四是要抓重点。揪住主要问题解决</div>
<div>五是DOM操作是瓶颈</div>
<div>六是不要做短期优化</div>
</div>
<p class="postmetadata">标签：<a href="http://hikejun.com/blog/?tag=ajax" rel="tag">ajax</a>, <a href="http://hikejun.com/blog/?tag=performance" rel="tag">performance</a><br />
发布在 <a title="查看 前端 的全部文章" href="http://hikejun.com/blog/?cat=1" rel="category">前端</a> | <a title="Douglas Crockford谈Ajax性能 上的评论" href="http://hikejun.com/blog/?p=23#respond">没有评论 &#187;</a></p>
</div>
<div class="post hentry category-frontend tag-ajax tag-performance">
<h3 id="post-75"><a title="高性能的Ajax应用－Julien Lecomte的永久链接" href="http://hikejun.com/blog/?p=75" rel="bookmark">高性能的Ajax应用－Julien Lecomte</a></h3>
<small>2007年12月21日，星期五</small>
<div class="entry">
<p>高性能的Ajax应用－Julien Lecomte</p>
<p>第1部分 高性能的开发</p>
<p>1.为高性能计划和设计<br />
－从每一天开始就要计划高性能<br />
－跟产品经理和设计师紧密的合作<br />
－理解设计的基本原理<br />
－设计和性能之前做解释和权衡<br />
－提供选择和展示各种可能（原型）<br />
－挑战自己，实现有挑战性的设计（不要只说&#8220;不&#8221;）<br />
－为了简化设计和交互，有时候需要妥协</p>
<p>2.高性能工程开发：一些基本规则<br />
－少就是多。不要做任何不必要的事。直到变得绝对重要，否则不要做。<br />
－打破规则。只能在迫不得以的情况下，才能妥协并打破最佳做法。<br />
－在提升可以感觉到的性能上下功夫。</p>
<p>3.衡量性能<br />
－使用用户真实环境测试<br />
－在开发中，profile你的代码<br />
－使用自动的profiling/性能测试<br />
－保持功能执行的历史数据<br />
－在产品中考虑保留一些（少量的）profiling代码</p>
<p>第2部分 高性能的页面下载 </p>
<p>1.Yahoo!的14条性能原则<br />
一个页面工作于3（有时是重叠的）个阶段－下载，渲染，运行。14条原则大部分作用于第1个阶段。</p>
<p>2.资源优化<br />
－最小化CSS和Javascript文件。推荐使用YUI Compressor（http://developer.yahoo.com/yui/compressor）压缩。远离那些所谓的先进的压缩方案，如Packer。<br />
－合并CSS和Javascript文件。在发布的时候合并(http://www.julienlecomte.net/blog/2007/09/16)或在运行的时候合并。<br />
－优化图片资源。如：PngCrush(http://pmt.sourceforge.net/pngcrush)、PngOptimizer(http://psydk.org/PngOptimizer.php)等。</p>
<p>3.减小非压缩代码的大小<br />
－下载和解析HTML、CSS、Javascript代码的成本是很高的。<br />
－用简练写法和写更少的代码<br />
－用好Javascript库<br />
－在考虑将大的Javascript文件拆成小的文件(bundle)时，解析和编译脚本时要花费大量额外的时间<br />
－按需下载代码（HTML、CSS、Javascript），如，Lazy Loading<br />
* 参见，http://ajaxpatterns.org/On-Demand_Javascript<br />
* 使用 YUI Loader<br />
* Dojo的package system<br />
* JSAN的Import System</p>
<p>4.优化初始渲染(1)：综合技巧<br />
－Consider rendering the first view on the server<br />
－关闭你的HTML标签提高解析速度。参见http://msdn2.microsoft.com/en-us/library/ms533020.aspx#Close_Your_Tags<br />
－考虑尽早缓存。<br />
－下载基本的资源，延迟或按需下载其他资源。使用YUI ImageLoader。</p>
<p>5.优化初始渲染(2)：不要一直等onload<br />
－大部分DOM操作可以在onload事件触发前完成<br />
－如果你需要控制你的初始化代码，可以直接写在里，并把它放在靠近的位置<br />
－否则，使用YUI事件组件中的onDOMReady方法<br />
YAHOO.util.Event.onDOMReady(function () {<br />
// Do something here&#8230;<br />
// e.g., attach event handlers.<br />
});</p>
<p>6.优化初始渲染(3)：在页面下载后，再下载脚本。<br />
－一个好的网站应该在Javascript失效下功能也应该是完整的<br />
－因此，你可以延迟下载脚本<br />
－这样做对下载其他资源（样式表、图片等）是有好处的<br />
－这样做使网站下载更快</p>
<p>7.优化初始渲染(4)：有条件的预下载<br />
－预下载潜在的资源（Javascript、CSS、图片等）真的可以增强用户体验。<br />
－可是，在什么时候进行功妙的预下载是关键，否则，预下载会影响用户体验。<br />
－参见http://www.sitepoint.com/article/web-site-optimization-steps/3<br />
－参见http://search.yahoo.com</p>
<p>第3部分 高性能的Javascript </p>
<p>1.减少符号查寻(1)：范围链<br />
－每次访问变量时都会执行查寻<br />
－变量从当前范围向上执行查寻<br />
－因此，无论何时都在相同范围中声明和使用变量<br />
－完全不要使用with，它会阻止编译器生成代码时访问本地变量的速度（因为首先要遍历原型链，然后是范围链等）<br />
－缓存外部变量到本地变量。<br />
不好的写法：<br />
var arr = &#8230;;<br />
var globalVar = 0;<br />
(function () {<br />
var i;<br />
for (i = 0; i &lt; arr.length; i++) {<br />
globalVar++;<br />
}<br />
})();</p>
<p>好的写法：<br />
var arr = &#8230;;<br />
var globalVar = 0;<br />
(function () {<br />
var i, l, localVar;<br />
l = arr.length;<br />
localVar = globalVar;<br />
for (i = 0; i &lt; l; i++) {<br />
localVar++;<br />
}<br />
globalVar = localVar;<br />
})();</p>
<p>2.减少符号查寻(2)：原型链<br />
－访问主对象上的成员的速度比访问原型链上的成员的速度快25%<br />
－原型链越长查寻越慢<br />
function A () {}<br />
A.prototype.prop1 = &#8230;;</p>
<p>function B () {<br />
this.prop2 = &#8230;;<br />
} </p>
<p>B.prototype = new A();<br />
var b = new B();//(译者：prop2为b的主对象成员，而prop1是原型链上的成员)</p>
<p>3.优化对象实例化<br />
－如果你需要创建很多对象，可以考虑添加成员到原型中，而不添加到单个对象的构造器中。<br />
－这样会减少内存的消耗<br />
－然而会拖慢查寻查寻对象成员的速度</p>
<p>4.不要使用eval<br />
－传字符串到eval中，需要编译和解释，相当的慢！<br />
－完全不要传一个字符串到setTimeout和setInterval中。可以使用匿名函数代替。<br />
setTimeout(function () {<br />
// Code to execute on a timeout<br />
}, 50);<br />
－完全不要eval做为方法的构造器。</p>
<p>5.优化字符串连接<br />
－在IE(JScript)中，连接两个字符串会导致一个新的字符串被重新分配资源，同时两个原字符串被复制：<br />
var s = &#8220;xxx&#8221; + &#8220;yyy&#8221;;<br />
s += &#8220;zzz&#8221;;<br />
－因此在IE中，添加字符串到数组中然后再用Array.join连接比直接用+连接快很多（不要用在简单的连接中）<br />
－其他Javascript引擎(WebKit、SpiderMonkey)已经对字符串连接做了优化<br />
－使用YUI Compressor!</p>
<p>6.优化正则表达式<br />
－尽量不要用RegExp构造，除非你的正则表达式需要实时创建。<br />
－使用test方法测试一个pattern（exec方法会有小的性能问题）<br />
－使用非捕获组(?:)<br />
－保持pattern的简单</p>
<p>7.缓存<br />
－在下面情况下应用缓存是合理的：<br />
* 更低成本的获取一个值<br />
* 值会被经常读取<br />
* 值不经常改变<br />
－会增加内存消耗（权衡）<br />
－Memoization:<br />
Module Pattern:<br />
var fn = (function () {<br />
var b = false, v;<br />
return function () {<br />
if (!b) {<br />
v = &#8230;;<br />
b = true;<br />
}<br />
return v;<br />
};<br />
})();</p>
<p>Store value in function object:<br />
function fn () {<br />
if (!fn.b) {<br />
fn.v = &#8230;;<br />
fn.b = true;<br />
}<br />
return fn.v;<br />
}</p>
<p>Lazy function definition:<br />
var fn = function () {<br />
var v = &#8230;;<br />
return (fn = function () {<br />
return v;<br />
})();<br />
};</p>
<p>8.如何控制长时间运行处理的Javascript<br />
－在Javascrit的长时间运行处理过程中，整个浏览器会被冻结<br />
－因此为了维持好的用户体验，确保Javascript一个线程在约300兆秒内完成<br />
－你可以通过用setTimeout将长运行处理拆成的更小处理单元串起来执行<br />
－更多见http://www.julienlecomte.net/blog/2007/10/28/<br />
－例子http://www.julienlecomte.net/blogfiles/javascript/long-running-js-process.html<br />
function doSomething (callbackFn) {<br />
// Initialize a few things here&#8230;<br />
(function () {<br />
// Do a little bit of work here&#8230;<br />
if (termination condition) {<br />
// We are done<br />
callbackFn();<br />
} else {<br <br />
&gt; // P<br />
rocess next chunk<br />
setTimeout(arguments.callee, 0);<br />
}<br />
})();<br />
}</p>
<p>9.综合技巧<br />
－简单的操作符往往比相应的方法要快<br />
c = Math.min(a, b);<br />
c = a &lt; b ? a : b;//更快</p>
<p>myArray.push(value);<br />
myArray[myArray.length] = value;//比上面快<br />
myArray[idx++] = value;//比上面快</p>
<p>－避免使用try&#8230;catch在影响性能的部分：<br />
不好的写法：<br />
var i;<br />
for (i = 0; i &lt; 100000; i++) {<br />
try {<br />
&#8230;<br />
} catch (e) {<br />
&#8230;<br />
}<br />
}<br />
好的写法：<br />
var i;<br />
try {<br />
for (i = 0; i &lt; 100000; i++) {<br />
&#8230;<br />
}<br />
} catch (e) {<br />
&#8230;<br />
}<br />
－If possible, avoid for&#8230;in in performance-critical sections<br />
－无论何时分支条件都不改变的情况下，分支应该在外面，不要在里面：<br />
不好的写法：<br />
function fn () {<br />
if (&#8230;) {<br />
&#8230;<br />
} else {<br />
&#8230;<br />
}<br />
}</p>
<p>好的写法：<br />
var fn;<br />
if (&#8230;) {<br />
fn = function () {&#8230;};<br />
} else {<br />
fn = function () {&#8230;};<br />
}</p>
<p>第4部分 高性能的动态HTML</p>
<p>1.文档树的修改：使用innerHTML<br />
注意事项http://www.julienlecomte.net/blog/2007/12/38</p>
<p>2.文档树的修改：使用cloneNode<br />
注意：expando属性或附加的事件会丢失</p>
<p>3.文档树的修改：使用DocumentFragment<br />
－DocumentFragment(DOM Level 1 Core)是一个轻量级的文档对象<br />
var i, j, el, table, tbody, row, cell, docFragment;<br />
docFragment = document.createDocumentFragment();<br />
el = document.createElement(&#8221;div&#8221;);<br />
docFragment.appendChild(el);<br />
table = document.createElement(&#8221;table&#8221;);<br />
el.appendChild(table);<br />
tbody = document.createElement(&#8221;tbody&#8221;);<br />
table.appendChild(tbody);<br />
for (i = 0; i &lt; 1000; i++) {<br />
&#8230;<br />
}<br />
document.body.appendChild(docFragment);<br />
－它仅仅支持常规DOM方法和属性的子集<br />
－IE实现DocumentFragment不服从W3C规范</p>
<p>4.限制事件柄的个数<br />
－附加事件到上百个元素上的成本很高<br />
－多个事件柄会增加潜在的内存漏洞<br />
－解决方案：使用事件委托机制，一种依靠事件冒泡的机制</p>
<p>5.限制回流(Reflow)</p>
<p>第5部分 高性能的布局和CSS</p>
<p>综合技巧<br />
－使用CSS Sprites<br />
－避免使用Javascript布局<br />
－避免使用IE表达式<br />
－避免使用IE滤镜(或尽可能少用)<br />
－优化Table布局<br />
－优化CSS选择器http://developer.mozilla.org/en/docs/Writing_Efficient_CSS</p>
<p>第6部分 高性能的Ajax</p>
<p>1.综合技巧<br />
－完全不要使用同步的XMLHttpRequest。参见http://yuiblog.com/blog/2006/04/04/synchronous-v-asynchronous<br />
－编程处理网络超时<br />
－解决方案：使用YUI Connection Manager<br />
var callback = {<br />
success: function () { /* Do something */ },<br />
failure: function () { /* Do something */ },<br />
timeout: 5000<br />
};<br />
YAHOO.util.Connect.asyncRequest(&#8221;GET&#8221;, url, callback);</p>
<p>2.提升可以感觉到的网络延迟体验<br />
－如果数据在提交到服务器端之前经过本地校验，通常请求的成功率达99.9%<br />
－因此，为了优化用户体验，我们可以采用下面的Pattern:<br />
* 当请求发出时要更新UI<br />
* Lock the UI/data structures with the finest possible granularity.<br />
* 让用户知道发生了什么事<br />
* 让用户知道为什么UI被锁定<br />
* 当成功返回结果后要及时解除锁定<br />
* 要用优雅的方式处理错误</p>
<p>3.综合技巧<br />
－知道并发HTTP/1.1连接的最大数量<br />
－如果后端支持，支持多元的Ajax请求<br />
－Piggyback unsollicited notifications in a response to an Ajax request.<br />
－用JSON代替XML做为数据交换格式<br />
－推送，不要轮询。使用COMET向浏览器发送实时的通知<br />
－考虑使用本地存储器缓存数据。<br />
* IE的userData<br />
* Flash本地存储<br />
* DOM:Storage(WHATWG持久存储API, 已在Firefox2中实现)<br />
* Google Gears<br />
* 其它</p>
<p>第7部分 性能工具</p>
<p>－YSlow? http://developer.yahoo.com/yslow<br />
－Task Manager<br />
－IE Leak Detector a.k.a Drip [ http://www.outofhanwell.com/ieleak/ ]<br />
－Stopwatch profiling<br />
* AjaxView [ http://research.microsoft.com/projects/ajaxview/ ]<br />
* JsLex [ http://rockstarapps.com/pmwiki/pmwiki.php?n=JsLex.JsLex ]<br />
* YUI profiler [ http://developer.yahoo.com/yui/profiler/ ]<br />
－Venkman or Firebug Profiler [ http://www.getfirebug.com/ ]</p>
<p>(原文：http://yuiblog.com/blog/2007/12/20/video-lecomte/</p>
</div>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/314123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-02-28 23:53 <a href="http://www.blogjava.net/ebecket/archive/2010/02/28/314123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自制弹出式内容框JS代码</title><link>http://www.blogjava.net/ebecket/archive/2010/02/28/314122.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Sun, 28 Feb 2010 15:50:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/02/28/314122.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/314122.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/02/28/314122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/314122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/314122.html</trackback:ping><description><![CDATA[//Xingmai命名空间<br id="bxye" />
if(!Xingmai)<br id="bxye0" />
var Xingmai = {};<br id="bxye1" />
<br id="bxye2" />
//内容窗口<br id="bxye3" />
Xingmai.ContentBox = <br id="bxye4" />
{<br id="bxye5" />
//创建窗口<br id="bxye6" />
CreateBox : function()<br id="bxye7" />
{<br id="bxye8" />
//创建窗体<br id="bxye9" />
var contentBox = {};<br id="bxye10" />
<br id="bxye11" />
//ID<br id="bxye12" />
contentBox.ID = null;<br id="bxye13" />
<br id="bxye14" />
//窗口Title<br id="bxye15" />
contentBox.Title = null;<br id="bxye16" />
<br id="bxye17" />
//窗口宽度<br id="bxye18" />
contentBox.Width = null;<br id="bxye19" />
<br id="bxye20" />
//窗口高度<br id="bxye21" />
contentBox.Height = null;<br id="bxye22" />
<br id="bxye23" />
//窗口左像素<br id="bxye24" />
contentBox.Left = null;<br id="bxye25" />
<br id="bxye26" />
//窗口顶像素<br id="bxye27" />
contentBox.Top = null;<br id="bxye28" />
<br id="bxye29" />
//Class定义<br id="bxye30" />
contentBox.ClassName= null;<br id="bxye31" />
<br id="bxye32" />
//默认值<br id="bxye33" />
contentBox.Common = {<br id="bxye34" />
Width : 500,<br id="bxye35" />
Height : 400,<br id="bxye36" />
Left : (document.documentElement.clientWidth - contentBox.Width)/2 + document.documentElement.scrollLeft,//有问题<br id="bxye37" />
Top : (document.documentElement.clientHeight - contentBox.Height)/2 + document.documentElement.scrollTop //有问题<br id="bxye38" />
};<br id="bxye39" />
//创建BOX<br id="bxye40" />
contentBox.Create = function()<br id="bxye41" />
{<br id="bxye42" />
//alert("a");<br id="bxye43" />
//创建主要界面<br id="bxye44" />
var newBox = document.createElement("div");<br id="bxye45" />
newBox.setAttribute("id", contentBox.ID);<br id="bxye46" />
with(newBox.style)<br id="bxye47" />
{<br id="bxye48" />
position = "absolute"; <br id="bxye49" />
zIndex = "9999"; <br id="bxye50" />
width = contentBox.Width + "px";<br id="bxye51" />
height = contentBox.Height + "px";<br id="bxye52" />
top = contentBox.Top;<br id="bxye53" />
left = contentBox.Left;<br id="bxye54" />
}<br id="bxye55" />
//newBox.setAttribute("style", "width : " + contentBox.Width + "px; height : " + contentBox.Height + "px;");<br id="bxye56" />
if(contentBox.ClassName!=null)<br id="bxye57" />
newBox.setAttribute("className", contentBox.ClassName);<br id="bxye58" />
<br id="bxye59" />
//创建标题栏和删除按钮<br id="bxye60" />
var titleSpan = document.createElement("div");<br id="bxye61" />
with(titleSpan.style)<br id="bxye62" />
{<br id="bxye63" />
height = "20px";<br id="bxye64" />
textAlign = "left";<br id="bxye65" />
verticalAlign = "middle";<br id="bxye66" />
}<br id="bxye67" />
//titleSpan.setAttribute("style", "height : " + "35" + "px;");<br id="bxye68" />
titleSpan.setAttribute("class","contentTitleSpan");<br id="bxye69" />
var spanDiv = document.createElement("div");<br id="bxye70" />
with(spanDiv.style)<br id="bxye71" />
{<br id="bxye72" />
width = contentBox.Width - 30 + "px";<br id="bxye73" />
styleFloat = "left";<br id="bxye74" />
textAlign = "left";<br id="bxye75" />
}<br id="bxye76" />
spanDiv.appendChild(document.createTextNode(contentBox.Title));<br id="bxye77" />
titleSpan.appendChild(spanDiv);<br id="bxye78" />
<br id="bxye79" />
var closeDiv = document.createElement("div");<br id="bxye80" />
with(closeDiv.style)<br id="bxye81" />
{<br id="bxye82" />
width = "20px";<br id="bxye83" />
styleFloat = "right";<br id="bxye84" />
textAlign = "right";<br id="bxye85" />
}<br id="bxye86" />
var closeButton = document.createElement("a");<br id="bxye87" />
closeButton.setAttribute("href", "#");<br id="bxye88" />
closeButton.appendChild(document.createTextNode("&#215;"));<br id="bxye89" />
$addHandler(closeButton,"click", function(){Xingmai.ContentBox.KillBox(contentBox.ID);});<br id="bxye90" />
closeDiv.appendChild(closeButton)<br id="bxye91" />
titleSpan.appendChild(closeDiv);<br id="bxye92" />
newBox.appendChild(titleSpan);<br id="bxye93" />
<br id="bxye94" />
//创建Iframe<br id="bxye95" />
var iframe = document.createElement("iframe");<br id="bxye96" />
iframe.setAttribute("class","contentIframe")<br id="bxye97" />
iframe.setAttribute("src" , contentBox.Url);<br id="bxye98" />
iframe.setAttribute("frameborder","0",0);<br id="bxye99" />
iframe.setAttribute("scrolling","no");<br id="bxye100" />
with(iframe.style)<br id="bxye101" />
{<br id="bxye102" />
border = "0";<br id="bxye103" />
width = "100%";<br id="bxye104" />
height = (contentBox.Height - 20) + "px";<br id="bxye105" />
}<br id="bxye106" />
newBox.appendChild(iframe);<br id="bxye107" />
<br id="bxye108" />
return newBox;<br id="bxye109" />
};<br id="bxye110" />
<br id="bxye111" />
//创建ID<br id="bxye112" />
contentBox.CreateID = function()<br id="bxye113" />
{<br id="bxye114" />
var now = new Date();<br id="bxye115" />
return "ContentBox" + now.getFullYear() + now.getMonth() + now.getDay() + now.getHours() + now.getMinutes() + now.getSeconds() + now.getMilliseconds();<br id="bxye116" />
};<br id="bxye117" />
<br id="bxye118" />
//显示窗口<br id="bxye119" />
contentBox.Show = function()<br id="bxye120" />
{<br id="bxye121" />
//处理默认值<br id="bxye122" />
contentBox.ID = contentBox.ID == null ? contentBox.CreateID() : contentBox.ID;<br id="bxye123" />
contentBox.Title = contentBox.Title == null ? "内容系统窗口" : contentBox.Title;<br id="bxye124" />
contentBox.Url = contentBox.Url == null ? "about:blank" : contentBox.Url;<br id="bxye125" />
if(isNaN(contentBox.Width)||contentBox.Width == null)<br id="bxye126" />
contentBox.Width = contentBox.Common.Width;<br id="bxye127" />
if(isNaN(contentBox.Height)||contentBox.Height == null)<br id="bxye128" />
contentBox.Height = contentBox.Common.Height;<br id="bxye129" />
if(isNaN(contentBox.Left)||contentBox.Left == null)<br id="bxye130" />
contentBox.Left = contentBox.Common.Left;<br id="bxye131" />
if(isNaN(contentBox.Top)||contentBox.Top == null)<br id="bxye132" />
contentBox.Top = contentBox.Common.Top;<br id="bxye133" />
<br id="bxye134" />
//创建窗口并显示<br id="bxye135" />
var add = contentBox.Create();<br id="bxye136" />
document.getElementsByTagName("body").item(0).appendChild(add);<br id="bxye137" />
}; <br id="bxye138" />
<br id="bxye139" />
return contentBox;<br id="bxye140" />
},<br id="bxye141" />
<br id="bxye142" />
//删除窗口<br id="bxye143" />
KillBox : function(id)<br id="bxye144" />
{<br id="bxye145" />
var box= document.getElementById(id);<br id="bxye146" />
if(box)<br id="bxye147" />
box.parentNode.removeChild(box);<br id="bxye148" />
}<br id="bxye149" />
}; 
<img src ="http://www.blogjava.net/ebecket/aggbug/314122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-02-28 23:50 <a href="http://www.blogjava.net/ebecket/archive/2010/02/28/314122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript提交验证</title><link>http://www.blogjava.net/ebecket/archive/2010/02/28/314116.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Sun, 28 Feb 2010 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/02/28/314116.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/314116.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/02/28/314116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/314116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/314116.html</trackback:ping><description><![CDATA[<font color="#000000" size="3" face="Times New Roman">function onlyNum()<br />
&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var realKey = String.fromCharCode(event.keyCode) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var myReg = /^(-|\+)?\d+(((\.\d+)|(\.))|((\/\d+)|(\/)))?$/;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(event.srcElement.value + realKey);<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(myReg.test(event.srcElement.value + realKey));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (myReg.test(event.srcElement.value + realKey) == false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.returnValue=false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;}<br />
<br />
调用代码：<br />
<font color="#000000" size="3" face="Times New Roman">&lt;input maxlength="256" id="MyID" onkeypress="onlyNum()"&gt;<br />
<br />
不过需要提交前进行验证或者在焦点离开时还要验证<br />
验证正则<br />
^(-|\+)?\d+((\.\d+)|(\/\d+))?$/<br />
如果不验证可能出现1.或者1/这样的输入</font></font>
<img src ="http://www.blogjava.net/ebecket/aggbug/314116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-02-28 22:17 <a href="http://www.blogjava.net/ebecket/archive/2010/02/28/314116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 7安全和网页挂马</title><link>http://www.blogjava.net/ebecket/archive/2010/01/25/310769.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Mon, 25 Jan 2010 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/25/310769.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310769.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/25/310769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310769.html</trackback:ping><description><![CDATA[<p>这几年来，国内网页挂马的现象是越来越严重。不管是白道黑道，或攻或防，都围绕着这个问题做文章。我们看到，有利用IE安全漏洞的0day，如去年的XML。或ActiveX控件的0day，如前一阵子的OWC安全漏洞。这一个过程中，安全厂商或是推出自己的IE的Plug-in监测，或是URL拦阻，或是在反病毒上做文章等等。</p>
<p>&nbsp;</p>
<p>我对于如反病毒之类的响应类型软件的效果，一直是有保留态度。有兴趣的同时可以参见最近有什么厉害的计算机病毒？一文。真正意义上的安全改进还是要依赖于操作系统一级上的提高。</p>
<p>&nbsp;</p>
<p>举个例子，以前在DOS时代给予引导扇区的病毒曾经很流行，但是随着操作系统的改进，在Windows上这类病毒已经销声匿迹了，这是因为它的攻击方式在操作系统一级上已经被阻止了。这种程度上的安全改进，是反病毒软件无法做到的。</p>
<p>&nbsp;</p>
<p>Vista由于种种原因，例如性能，在国内就没有普及。现在还是以XP为主。让我们来看看现在的给予IE/XP的挂马方式吧，绝大情况就是给予0day或是已经打了补丁的安全漏洞（用户可能没有及时更新），加上堆污染，然后感染用户的机器。效果就是用户访问了一个恶意网页，然后中招。</p>
<p>&nbsp;</p>
<p>那我们看看，在Win7上，会是什么样子。在Win7上，IE8+DEP+ALSR+SEHOP+Low Right，目前所有的挂马方式，都不能成功。换句话说，就算是IE8有一个0day的安全漏洞，你在Win7上访问到一个被挂了马的恶意网页，也不会被感染。不需要有其它反病毒软件的帮助。当然，如果你一定要直接下载一个EXE文件再运行，就没有办法了。</p>
<p>&nbsp;</p>
<p>Win7的性能和兼用型都做的比Vista好了许多。从现在的反馈看，Win7的普及会非常快的。随着XP的换代，困扰大家这么长时间的网页挂马现象会得到非常大的改进。当然，攻击者总会发现新的攻击方式，不过像XP上现在这么容易的攻击方式估计是不会在有了。我也对在安全领域工作的几个朋友提及，要好好评估一下Win7对他们产品带来的影响。新的一轮的洗牌，也就会在这一两年内吧。</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/chengyun_chu/archive/2009/09/17/4561097.aspx</p>
<img src ="http://www.blogjava.net/ebecket/aggbug/310769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-25 20:18 <a href="http://www.blogjava.net/ebecket/archive/2010/01/25/310769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于HttpModule</title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310167.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:44:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310167.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310167.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310167.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/Monday/archive/2008/01/16/1040876.html">
<h1 class="postTitle"></a><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/Monday/archive/2008/01/16/1040876.html">关于HttpModule</a><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/Monday/archive/2008/01/16/1040876.html"></h1>
<br />
这几天在看一个项目,非常有感触.觉得自己知道的还是太少,需要学习的东西也非常之多.其实很多底层的东西应该多去了解,这样对于自己开发一个应用系统以及开发的模式会有很大的帮助,就比如系统权限方面,以前自己写的权限这块看来真的是小儿科,而今看到了利用HttpModule来配合权限的编写,又让我好好的学习了一把,在网上找到对于HttpModule的一些基础解释,先转发过来,供自己和一些路过的朋友参考.<br />
<br />
<br />
--------------------<br />
来源：赛迪网&nbsp; 作者：孙亚民<br />
<br />
ASP.Net中自定义Http处理及应用之HttpModule篇<br />
<br />
HttpHandler实现了类似于ISAPI Extention的功能，他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。 <br />
<br />
<center><font color="#000099"><strong>HttpModule的实现</strong></font></center><br />
<br />
HttpModules实现了类似于ISAPI Filter的功能，在开发上，通常需要经过以下步骤： <br />
<br />
1.编写一个类，实现IhttpModule接口 <br />
<br />
2.实现Init 方法，并且注册需要的方法 <br />
<br />
3.实现注册的方法 <br />
<br />
4.实现Dispose方法，如果需要手工为类做一些清除工作，可以添加Dispose方法的实现，但这不是必需的，通常可以不为Dispose方法添加任何代码。 <br />
<br />
5.在Web.config文件中，注册您编写的类 <br />
<br />
下面是一个HttpModules的示例，在这个示例中，只是简单的注册了HttpApplication 的BeginRequest 和 EndRequest事件，并且通过这些事件的实现方法，将相关的信息打印出来。 <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>例1：
            using System;
            using System.Web;
            namespace MyModule
            {
            public class MyModule : IHttpModule
            {
            public void Init(HttpApplication application)
            {
            application.BeginRequest += (new
            EventHandler(this.Application_BeginRequest));
            application.EndRequest += (new
            EventHandler(this.Application_EndRequest));
            }
            private void Application_BeginRequest(Object source, EventArgs e)
            {
            HttpApplication Application = (HttpApplication)source;
            HttpResponse Response=Application.Context.Response;
            Response.Write("&lt;h1&gt;Beginning of Request&lt;/h1&gt;&lt;hr&gt;");
            }
            private void Application_EndRequest(Object source, EventArgs e)
            {
            HttpApplication application = (HttpApplication)source;
            HttpResponse Response=Application.Context.Response;
            Response.Write("&lt;h1&gt;End of Request&lt;/h1&gt;&lt;hr&gt;");
            }
            public void Dispose()
            {
            }
            }
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
程序的开始引用了如下名称空间： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>using System;
            using System.Web;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
因为HttpApplication、HttpContext、HttpResponse等类在System.Web中定义，因此，System.Web名称空间是必须引用的。 <br />
<br />
MyModule类实现了IhttpModule接口。在Init方法中，指明了实现BeginRequest 和EndRequest 事件的方法。在这两个方法中，只是简单的分别打印了一些信息。 <br />
<br />
下面，在Web.config文件中注册这个类，就可以使用这个HttpModule了，注册的方法如下： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>&lt;configuration&gt;
            &lt;system.web&gt;
            &lt;httpModules&gt;
            &lt;add name=" MyModule " type=" MyModule, MyModule" /&gt;
            &lt;/httpModules&gt;
            &lt;/system.web&gt;
            &lt;/configuration&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
现在来看一下效果。编写一个Aspx页面test.aspx，内容如下： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>&lt;%
            Response.Write("&lt;h1&gt;This is the Page&lt;/h1&gt;&lt;hr&gt;");
            %&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
运行以后的界面如图所示： <br />
<br />
<center><img alt="" src="file:///F:/网站开发/MyProject/收集的学习资料/ASP_Net中自定义Http处理及应用之HttpModule篇.files/55216.gif" /></center><br />
<br />
<center><font color="#000099"><strong>深入研究HttpModule</strong></font></center><br />
<br />
HttpModule通过对HttpApplication对象的一系列事件的处理来对HTTP处理管道施加影响，这些事件在HttpModule的Init方法中进行注册，包括： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>BeginRequest
            AuthenticateRequest
            AuthorizeRequest
            ResolveRequestCache
            AcquireRequestState
            PreRequestHandlerExecute
            PostRequestHandlerExecute
            ReleaseRequestState
            UpdateRequestCache
            EndRequest</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
其中部分事件同Global.asax中的事件相对应，对应关系如下： <br />
<br />
<center><ccid_nobr>
<table class="content" border="1" width="502">
    <tbody>
        <tr>
            <td>HttpModule</td>
            <td>Global.asax</td>
        </tr>
        <tr>
            <td>BeginRequest</td>
            <td>Application_BeginRequest</td>
        </tr>
        <tr>
            <td>AuthenticateRequest</td>
            <td>Application_AuthenticateRequest</td>
        </tr>
        <tr>
            <td>EndRequest</td>
            <td>Application_EndRequest</td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><br />
<br />
在例1中，处理了BeginRequest和EndRequest事件，其他事件的处理方式基本上类似。 <br />
<br />
同HttpHandler对应来看，这些事件，有些在HttpHandler之前发生，有些在HttpHandler处理完后发生。了解事件发生的顺序非常重要，因为，服务器端的对象在不同的时间段有着不同的表现。例子之一是Session的使用。不是所有的事件中都能对Session进行处理，而只能在有限的几个事件中进行处理。详细的过程可以参考下面的HTTP Request处理生命周期图。 <br />
<br />
<center><img alt="" src="file:///F:/网站开发/MyProject/收集的学习资料/ASP_Net中自定义Http处理及应用之HttpModule篇.files/55299.gif" /></center><br />
<br />
<center><font color="#000099"><strong>使用HttpModule实现权限系统</strong></font></center><br />
<br />
我们在开发应用系统的时候，应用系统的权限控制是非常重要的一个部分。在ASP中，要实现权限的控制是比较麻烦的事情，因为我们必须在每个需要控制权限的ASP页面中添加权限控制代码，从而控制客户对页面的访问。这样带来的问题，除了编写大量重复代码外，由于权限控制部分同业务处理部分的模块紧密耦合在一起，对权限控制模块的修改，往往又会带来大量的修改工作，甚至造成大量的Bug。 <br />
<br />
所以，我们现在需要将权限控制和业务处理模块进行解耦，使得两个部分可以独立开发和修改，而不会互相影响，或者，将影响减到最低。在Jsp程序中，这个目的可以通过引入一个前端控制器来实现权限过滤（关于前端控制器模式，可以参见《J2EE核心模式一书》）。在ASP.Net中，我们可以利用HttpModule实现同样的效果。下面来看一下实现的过程。 <br />
<br />
首先，我们会构建一个权限处理系统，可以检测某个用户对某个模块功能是否有访问权限（具体的结构，我想，读者都应该接触过这个部分的编程，所以不再赘述），其中，暴露给客户端调用的权限校验类的定义如下： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>public class RightChecker
            {
            public static bool HasRight(User user,Module module)
            {
            //进行权限校验，
            }
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
然后，我们利用HttpModule编写一个过滤器： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>using System;
            using System.Web;
            namespace MyModule
            {
            public class MyModule : IHttpModule
            {
            public void Init(HttpApplication application)
            {
            application. AcquireRequestState += (new
            EventHandler(this.Application_AcquireRequestState));
            }
            private void Application_AcquireRequestState (Object source,
            EventArgs e)
            {
            HttpApplication Application = (HttpApplication)source;
            User user=Application.Context.Sesseion["User"]  //获取User
            string url=Application.Context.Request.Path;
            //获取客户访问的页面
            Module module= //根据url得到所在的模块
            If(!RightChecker.HasRight(user,module))
            Application.Context.Server.Transfer("ErrorPage.aspx");
            //如果没有权限，引导到错误处理的页面
            }
            public void Dispose()
            {
            }
            }
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
将这个类按照前面介绍的方法，在Web.Config中注册后，我们的应用系统就具备权限管理的功能了。怎么样，比原来的方式好很多吧？ <br />
<br />
<center><font color="#000099"><strong>结束语</strong></font></center><br />
<br />
在.Net中，微软把原来具有较高难度的服务器扩展的编程作了很大的简化，对于我们开发的确带来了很大的方便，值得我们对此技术进行深入的研究。 </a></h1>
<br />
这几天在看一个项目,非常有感触.觉得自己知道的还是太少,需要学习的东西也非常之多.其实很多底层的东西应该多去了解,这样对于自己开发一个应用系统以及开发的模式会有很大的帮助,就比如系统权限方面,以前自己写的权限这块看来真的是小儿科,而今看到了利用HttpModule来配合权限的编写,又让我好好的学习了一把,在网上找到对于HttpModule的一些基础解释,先转发过来,供自己和一些路过的朋友参考.<br />
<br />
<br />
--------------------<br />
来源：赛迪网&nbsp; 作者：孙亚民<br />
<br />
ASP.Net中自定义Http处理及应用之HttpModule篇<br />
<br />
HttpHandler实现了类似于ISAPI Extention的功能，他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。 <br />
<br />
<center><font color="#000099"><strong>HttpModule的实现</strong></font></center><br />
<br />
HttpModules实现了类似于ISAPI Filter的功能，在开发上，通常需要经过以下步骤： <br />
<br />
1.编写一个类，实现IhttpModule接口 <br />
<br />
2.实现Init 方法，并且注册需要的方法 <br />
<br />
3.实现注册的方法 <br />
<br />
4.实现Dispose方法，如果需要手工为类做一些清除工作，可以添加Dispose方法的实现，但这不是必需的，通常可以不为Dispose方法添加任何代码。 <br />
<br />
5.在Web.config文件中，注册您编写的类 <br />
<br />
下面是一个HttpModules的示例，在这个示例中，只是简单的注册了HttpApplication 的BeginRequest 和 EndRequest事件，并且通过这些事件的实现方法，将相关的信息打印出来。 <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>例1：
            using System;
            using System.Web;
            namespace MyModule
            {
            public class MyModule : IHttpModule
            {
            public void Init(HttpApplication application)
            {
            application.BeginRequest += (new
            EventHandler(this.Application_BeginRequest));
            application.EndRequest += (new
            EventHandler(this.Application_EndRequest));
            }
            private void Application_BeginRequest(Object source, EventArgs e)
            {
            HttpApplication Application = (HttpApplication)source;
            HttpResponse Response=Application.Context.Response;
            Response.Write("&lt;h1&gt;Beginning of Request&lt;/h1&gt;&lt;hr&gt;");
            }
            private void Application_EndRequest(Object source, EventArgs e)
            {
            HttpApplication application = (HttpApplication)source;
            HttpResponse Response=Application.Context.Response;
            Response.Write("&lt;h1&gt;End of Request&lt;/h1&gt;&lt;hr&gt;");
            }
            public void Dispose()
            {
            }
            }
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
程序的开始引用了如下名称空间： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>using System;
            using System.Web;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
因为HttpApplication、HttpContext、HttpResponse等类在System.Web中定义，因此，System.Web名称空间是必须引用的。 <br />
<br />
MyModule类实现了IhttpModule接口。在Init方法中，指明了实现BeginRequest 和EndRequest 事件的方法。在这两个方法中，只是简单的分别打印了一些信息。 <br />
<br />
下面，在Web.config文件中注册这个类，就可以使用这个HttpModule了，注册的方法如下： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>&lt;configuration&gt;
            &lt;system.web&gt;
            &lt;httpModules&gt;
            &lt;add name=" MyModule " type=" MyModule, MyModule" /&gt;
            &lt;/httpModules&gt;
            &lt;/system.web&gt;
            &lt;/configuration&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
现在来看一下效果。编写一个Aspx页面test.aspx，内容如下： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>&lt;%
            Response.Write("&lt;h1&gt;This is the Page&lt;/h1&gt;&lt;hr&gt;");
            %&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
运行以后的界面如图所示： <br />
<br />
<center><img alt="" src="file:///F:/网站开发/MyProject/收集的学习资料/ASP_Net中自定义Http处理及应用之HttpModule篇.files/55216.gif" /></center><br />
<br />
<center><font color="#000099"><strong>深入研究HttpModule</strong></font></center><br />
<br />
HttpModule通过对HttpApplication对象的一系列事件的处理来对HTTP处理管道施加影响，这些事件在HttpModule的Init方法中进行注册，包括： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>BeginRequest
            AuthenticateRequest
            AuthorizeRequest
            ResolveRequestCache
            AcquireRequestState
            PreRequestHandlerExecute
            PostRequestHandlerExecute
            ReleaseRequestState
            UpdateRequestCache
            EndRequest</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
其中部分事件同Global.asax中的事件相对应，对应关系如下： <br />
<br />
<center><ccid_nobr>
<table class="content" border="1" width="502">
    <tbody>
        <tr>
            <td>HttpModule</td>
            <td>Global.asax</td>
        </tr>
        <tr>
            <td>BeginRequest</td>
            <td>Application_BeginRequest</td>
        </tr>
        <tr>
            <td>AuthenticateRequest</td>
            <td>Application_AuthenticateRequest</td>
        </tr>
        <tr>
            <td>EndRequest</td>
            <td>Application_EndRequest</td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><br />
<br />
在例1中，处理了BeginRequest和EndRequest事件，其他事件的处理方式基本上类似。 <br />
<br />
同HttpHandler对应来看，这些事件，有些在HttpHandler之前发生，有些在HttpHandler处理完后发生。了解事件发生的顺序非常重要，因为，服务器端的对象在不同的时间段有着不同的表现。例子之一是Session的使用。不是所有的事件中都能对Session进行处理，而只能在有限的几个事件中进行处理。详细的过程可以参考下面的HTTP Request处理生命周期图。 <br />
<br />
<center><img alt="" src="file:///F:/网站开发/MyProject/收集的学习资料/ASP_Net中自定义Http处理及应用之HttpModule篇.files/55299.gif" /></center><br />
<br />
<center><font color="#000099"><strong>使用HttpModule实现权限系统</strong></font></center><br />
<br />
我们在开发应用系统的时候，应用系统的权限控制是非常重要的一个部分。在ASP中，要实现权限的控制是比较麻烦的事情，因为我们必须在每个需要控制权限的ASP页面中添加权限控制代码，从而控制客户对页面的访问。这样带来的问题，除了编写大量重复代码外，由于权限控制部分同业务处理部分的模块紧密耦合在一起，对权限控制模块的修改，往往又会带来大量的修改工作，甚至造成大量的Bug。 <br />
<br />
所以，我们现在需要将权限控制和业务处理模块进行解耦，使得两个部分可以独立开发和修改，而不会互相影响，或者，将影响减到最低。在Jsp程序中，这个目的可以通过引入一个前端控制器来实现权限过滤（关于前端控制器模式，可以参见《J2EE核心模式一书》）。在ASP.Net中，我们可以利用HttpModule实现同样的效果。下面来看一下实现的过程。 <br />
<br />
首先，我们会构建一个权限处理系统，可以检测某个用户对某个模块功能是否有访问权限（具体的结构，我想，读者都应该接触过这个部分的编程，所以不再赘述），其中，暴露给客户端调用的权限校验类的定义如下： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>public class RightChecker
            {
            public static bool HasRight(User user,Module module)
            {
            //进行权限校验，
            }
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
然后，我们利用HttpModule编写一个过滤器： <br />
<br />
<ccid_nobr>
<table border="1" cellspacing="0" bordercolorlight="black" bordercolordark="#ffffff" cellpadding="2" width="550" align="center">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre><ccid_code>using System;
            using System.Web;
            namespace MyModule
            {
            public class MyModule : IHttpModule
            {
            public void Init(HttpApplication application)
            {
            application. AcquireRequestState += (new
            EventHandler(this.Application_AcquireRequestState));
            }
            private void Application_AcquireRequestState (Object source,
            EventArgs e)
            {
            HttpApplication Application = (HttpApplication)source;
            User user=Application.Context.Sesseion["User"]  //获取User
            string url=Application.Context.Request.Path;
            //获取客户访问的页面
            Module module= //根据url得到所在的模块
            If(!RightChecker.HasRight(user,module))
            Application.Context.Server.Transfer("ErrorPage.aspx");
            //如果没有权限，引导到错误处理的页面
            }
            public void Dispose()
            {
            }
            }
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr><br />
<br />
将这个类按照前面介绍的方法，在Web.Config中注册后，我们的应用系统就具备权限管理的功能了。怎么样，比原来的方式好很多吧？ <br />
<br />
<center><font color="#000099"><strong>结束语</strong></font></center><br />
<br />
在.Net中，微软把原来具有较高难度的服务器扩展的编程作了很大的简化，对于我们开发的确带来了很大的方便，值得我们对此技术进行深入的研究。 
<img src ="http://www.blogjava.net/ebecket/aggbug/310167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:44 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.net Cookies安全性实践</title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310161.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:30:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310161.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310161.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310161.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" href="http://www.cnblogs.com/birdshover/archive/2009/04/21/1440634.html">.net Cookies安全性实践</a> </h1>
<div class="clear"></div>
<div class="postBody">
<p>首先，你要相信网络是不安全的，TCP协议也是不安全的。HTTP访问是基于TCP协议来完成的，其能够被攻击是一定的。</p>
<p>跨站脚本攻击一直是Web上常见的手段之一，攻击一般是劫持用户会话，拿到私有的钥匙。如何劫持这个会话呢？</p>
<p><strong>一、Sniffer（这里采用的软件是<strong>Sniffer，java版的那个</strong>）</strong></p>
<p>Sniffer监听会话是不可护的，就和KOF里拉尔夫的宇宙幻影一样，只要打中，一定是致命的。</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdshover/Sniffer.gif" width="678" height="240" /></p>
<p>上图，就是一组侦听数据，当然这里侦听的是我本机的数据。实际上是可以侦听局域网，甚至广域网上的数据。</p>
<p>得到一组16进制的值。可以用以下代码获得其值：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img style="display: none" id="Code_Closed_Image_170215" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_170215').style.display='none'; document.getElementById('Code_Open_Image_170215').style.display='inline'; document.getElementById('Code_Open_Text_170215').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"  alt="" /><img style="display: inline" id="Code_Open_Image_170215" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_170215').style.display='none'; getElementById('Code_Closed_Image_170215').style.display='inline'; getElementById('Code_Closed_Text_170215').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"  alt="" /><span style="display: none" id="Code_Closed_Text_170215" class="cnblogs_code_Collapse">Code</span><span style="display: inline" id="Code_Open_Text_170215"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;bytestr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;byteArray&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;bytestr.Split(</span><span style="color: #800000">'</span><span style="color: #800000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #000000">);<br />
</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[byteArray.Length];<br />
</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;byteArray.Length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;b[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Convert.ToByte(byteArray[i],&nbsp;</span><span style="color: #800080">16</span><span style="color: #000000">);<br />
}<br />
</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;msg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Encoding.UTF8.GetString(b);<br />
Console.WriteLine(msg);<br />
<br />
Console.Read();</span></span></div>
<p>&nbsp;</p>
<p>bytestr&nbsp;变量就放置16进制字符串就行了。另外这里使用的编码是utf-8，实际应用中应该与网站的编码匹配。这个实验是拿博客园做实验的。博客园登录状态的cookie名为&#8220;.DottextCookie&#8221;。</p>
<p>在firefox中，退出博客园登录，然后切换到firebug的控制台，使用命令行键入document.cookie='.DottextCookie=******;'，然后刷新页面，看到了什么？现在正处于登录状态！</p>
<p>实际上在会话劫持中，一般都是拿登录cookie的值，无论其是否加密，都可以劫持。</p>
<p><strong>二、跨域脚本攻击</strong></p>
<p>要实现跨域脚本攻击，除了利用浏览器漏洞，或者ARP欺骗，一般需要有两个要素。首要的要素是，被攻击的网站，需要能自定义html代码(除了利用漏洞，一般是要支持script)。在客户端使用document.cookie就可以拿到cookie的值，然后进行分析，找出需要的键值对。就可以完成攻击。这里关于如何跨域保存信息就不讨论了。</p>
<p>比如有以下代码：</p>
<p>HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");<br />
Response.Cookies.Add(cookie);</p>
<p>实现了cookie的写入。而在这个域下的页面中，我有权限设置某个页面中包含脚本的话，就可以实现攻击。</p>
<p>&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;document.write(document.cookie);<br />
&nbsp;&lt;/script&gt;</p>
<p>以上代码是个简单的输出，如果我把拦截到的document.cookie发送到我能保存数据的地方，那么就可以拿到很多有用的信息。这样就完成了跨域脚本攻击。</p>
<p><strong>三、其它攻击方法</strong><br />
其他攻击方法只要能够拿到这个cookie就可以了，不管你是用flash或者其它办法。</p>
<p><strong>四、可以防止的和不可防止的</strong><br />
刚才介绍到Sniffer方法是不可防止，那怎么防止脚本的攻击呢？可以禁止用户使用脚本，很多网站都这么做的，如果一定要使用的话，需要对cookie做特殊设置。在dotnet中，可以这样处理：</p>
<p>HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");<br />
cookie.HttpOnly = true;<br />
Response.Cookies.Add(cookie);</p>
<p>这样，在客户端就不可以访问这个键值对的cookie,从而让其他人即使能用脚本拦截会话，但是无法得到关键数据。</p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/310161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:30 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现HTTP内容的抓取</title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310162.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:30:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310162.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310162.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310162.html</trackback:ping><description><![CDATA[<h2>实现HTTP内容的抓取</h2>
<div class="entry">
<p>前段时间做了一个网页爬虫，初次接触，收获了很多知识。其中关于HTTP协议的内容，记述如下：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RFC2616中主要描述了HTTP 1.1协议。下面的描述没有实现其各个方面的内容，只提出了一种能够完成所有HTTP网页抓取的最小实现（不能够抓取HTTPS）。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、首先提交一个URL地址，分为普通的GET网页获取，POST的数据提交两种基本模式。<br />
<br />
建立HttpWebReques实例，其中uri是网页的URL的地址：<br />
&nbsp;&nbsp;&nbsp;HttpWebRequest webrequest =&nbsp;(HttpWebRequest) WebRequest.Create(uri);<br />
<br />
KeepAlive表示HTTP的连接是长连接：<br />
&nbsp;&nbsp;&nbsp;webrequest.KeepAlive = true;<br />
<br />
如果需要，添加引用地址，主要用于防止其他网站的连接引用，比如登陆时，经常需要验证：<br />
&nbsp;&nbsp;&nbsp;if(referer!=null)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Referer=referer;<br />
&nbsp;&nbsp;&nbsp;}<br />
<br />
选择数据的提交方式，有GET、POST两种方式，HEAD不常用：<br />
&nbsp;&nbsp;&nbsp;switch(RequestMethod)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 1:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Method="GET";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 2:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Method="POST";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 3:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Method="HEAD";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Method="GET";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;}<br />
<br />
设置User－Agent，经常遇到，在某些网站中，做了限制，User－Agent为空，则不能访问：<br />
&nbsp;&nbsp;&nbsp;webrequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50215; fqSpider)";<br />
<br />
添加其他的HTTP的Header信息，collHeader是一个NameValue的Collection：<br />
&nbsp;&nbsp;&nbsp;if(collHeader!=null&amp;&amp;collHeader.Count&gt;0)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int iCount = collHeader.Count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string key;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string keyvalue;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0; i &lt; iCount; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key = collHeader.Keys[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyvalue = collHeader[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Headers.Add(key, keyvalue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
<br />
设置Content－Type的内容，如果为POST，设置成application/x-www-form-urlencoded，如果是Get设置成text/html：<br />
&nbsp;&nbsp;&nbsp;if(webrequest.Method=="POST")<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;webrequest.ContentType="application/x-www-form-urlencoded";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;webrequest.ContentType = "text/html"; <br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;<br />
设置代理服务器地址和端口：<br />
&nbsp;&nbsp;&nbsp;if ((ProxyServer!=null) &amp;&amp;(ProxyServer.Length &gt; 0))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Proxy = new <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebProxy(ProxyServer,ProxyPort);<br />
&nbsp;&nbsp;&nbsp;}<br />
<br />
设置是否允许自动转移：<br />
&nbsp;&nbsp;&nbsp;webrequest.AllowAutoRedirect = true;<br />
<br />
设置基本的登陆认证&nbsp;：<br />
&nbsp;&nbsp;&nbsp;if (NwCred)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;CredentialCache wrCache = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new CredentialCache();<br />
&nbsp;&nbsp;&nbsp;&nbsp;wrCache.Add(new Uri(uri),"Basic",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new NetworkCredential(UserName,UserPwd));<br />
&nbsp;&nbsp;&nbsp;&nbsp;webrequest.Credentials = wrCache;<br />
&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
<br />
设置Request的Cookie容器：<br />
&nbsp;&nbsp;&nbsp;webrequest.CookieContainer=Cookies;<br />
<br />
设置POST数据：<br />
&nbsp;&nbsp;&nbsp;byte[] bytes = Encoding.ASCII.GetBytes(RequestData);<br />
&nbsp;&nbsp;&nbsp;webrequest.ContentLength=bytes.Length;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;Stream oStreamOut = webrequest.GetRequestStream();<br />
&nbsp;&nbsp;&nbsp;oStreamOut.Write(bytes,0,bytes.Length);<br />
&nbsp;&nbsp;&nbsp;oStreamOut.Close();<br />
</p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/310162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:30 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一直处于页面底部的div</title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310160.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:29:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310160.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310160.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310160.html</trackback:ping><description><![CDATA[<h1><a title="Permanent Link to 一直处于页面底部的div" href="http://paaboo.cn/wordpress/index.php/archives/168" rel="bookmark">一直处于页面底部的div</a></h1>
<div class="postinfo"><span class="date">一月 14th, 2009</span><span class="urcomments"> <a title="一直处于页面底部的div 上的评论" href="http://paaboo.cn/wordpress/index.php/archives/168#respond">No Comments &#187;</a></span><!-- by wzh --></div>
<div class="clear"></div>
<div class="entry">
<p>看到facebook每个页面底部的工具栏了吗？如图：</p>
<p><a href="http://paaboo.cn/wordpress/wp-content/uploads/2009/01/.jpg"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="阿斯顿发生大幅" src="http://paaboo.cn/wordpress/wp-content/uploads/2009/01/thumb.jpg" width="703" height="56" /></a></p>
<p>&nbsp;</p>
<p>昨天用js写了一个，代码如下：</p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>$(document).ready(<span class="kwrd">function</span>() {</pre>
<pre><span class="lnum">   2:  </span>            fixPosition();</pre>
<pre class="alt"><span class="lnum">   3:  </span>&nbsp;</pre>
<pre><span class="lnum">   4:  </span>            $(window).resize(fixPosition).scroll(fixPosition);</pre>
<pre class="alt"><span class="lnum">   5:  </span>        });</pre>
<pre><span class="lnum">   6:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">   7:  </span>        <span class="kwrd">function</span> fixPosition() {</pre>
<pre><span class="lnum">   8:  </span>&nbsp;</pre>
<pre class="alt"><span class="lnum">   9:  </span>            $(<span class="str">'.bottom'</span>).css(<span class="str">"top"</span>, document.body.offsetHeight + getScrollTop() - 200)</pre>
<pre><span class="lnum">  10:  </span>            .css(<span class="str">'left'</span>, (document.body.offsetWidth - 500) / 2).html(</pre>
<pre class="alt"><span class="lnum">  11:  </span>                <span class="str">'document.body.offsetHeight:'</span> + document.body.offsetHeight</pre>
<pre><span class="lnum">  12:  </span>                + <span class="str">'&lt;br/&gt;document.body.scrollTop:'</span> + document.body.scrollTop</pre>
<pre class="alt"><span class="lnum">  13:  </span>                + <span class="str">'&lt;br/&gt;document.body.clientHeight:'</span> + document.body.clientHeight</pre>
<pre><span class="lnum">  14:  </span>                + <span class="str">'&lt;br/&gt;document.body.scrollHeight:'</span> + document.body.scrollHeight</pre>
<pre class="alt"><span class="lnum">  15:  </span>                + <span class="str">'&lt;br/&gt;document.documentElement.scrollTop:'</span> + document.documentElement.scrollTop</pre>
<pre><span class="lnum">  16:  </span>                + <span class="str">'&lt;br/&gt;'</span> + <span class="kwrd">new</span> Date().toLocaleTimeString());</pre>
<pre class="alt"><span class="lnum">  17:  </span>        }</pre>
<pre><span class="lnum">  18:  </span>        <span class="kwrd">function</span> getScrollTop() {</pre>
<pre class="alt"><span class="lnum">  19:  </span>            <span class="kwrd">var</span> scrollPos = 0;</pre>
<pre><span class="lnum">  20:  </span>            <span class="kwrd">if</span> (<span class="kwrd">typeof</span> window.pageYOffset != <span class="str">'undefined'</span>) {</pre>
<pre class="alt"><span class="lnum">  21:  </span>                scrollPos = window.pageYOffset;</pre>
<pre><span class="lnum">  22:  </span>            }</pre>
<pre class="alt"><span class="lnum">  23:  </span>            <span class="kwrd">else</span> <span class="kwrd">if</span> (<span class="kwrd">typeof</span> window.document.compatMode != <span class="str">'undefined'</span> &amp;&amp;</pre>
<pre><span class="lnum">  24:  </span>        window.document.compatMode != <span class="str">'BackCompat'</span>) {</pre>
<pre class="alt"><span class="lnum">  25:  </span>                scrollPos = window.document.documentElement.scrollTop;</pre>
<pre><span class="lnum">  26:  </span>            }</pre>
<pre class="alt"><span class="lnum">  27:  </span>            <span class="kwrd">else</span> <span class="kwrd">if</span> (<span class="kwrd">typeof</span> window.document.body != <span class="str">'undefined'</span>) {</pre>
<pre><span class="lnum">  28:  </span>                scrollPos = window.document.body.scrollTop;</pre>
<pre class="alt"><span class="lnum">  29:  </span>            }</pre>
<pre><span class="lnum">  30:  </span>            <span class="kwrd">return</span> scrollPos;</pre>
<pre class="alt"><span class="lnum">  31:  </span>        }  </pre>
</div>
<div class="csharpcode">css代码：</div>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span>.bottom</pre>
<pre><span class="lnum">   2:  </span>        {</pre>
<pre class="alt"><span class="lnum">   3:  </span>            position: absolute;</pre>
<pre><span class="lnum">   4:  </span>            height: 200px;</pre>
<pre class="alt"><span class="lnum">   5:  </span>            background: #ddd;</pre>
<pre><span class="lnum">   6:  </span>            width: 500px;</pre>
<pre class="alt"><span class="lnum">   7:  </span>        }</pre>
</div>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>
<style type="text/css">.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
</p>
<p>不过在ie和firefox下使用的时候都会闪，而facebook的却一点也不闪，好奇之下用firebug看了看样式，原来如此：</p>
<p>&nbsp;</p>
<p><a href="http://paaboo.cn/wordpress/wp-content/uploads/2009/01/1.jpg"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="热热人" src="http://paaboo.cn/wordpress/wp-content/uploads/2009/01/thumb1.jpg" width="1075" height="276" /></a> </p>
<p>原来用css实现了，代码如下</p>
<p>&nbsp;</p>
<pre>.<span style="color: #800000">bottom</span>
{
<span style="color: #ff0000">bottom</span>: <span style="color: #0000ff">0</span>;
<span style="color: #ff0000">color</span>: <span style="color: #0000ff">#111111</span>;
<span style="color: #ff0000">font-size</span>: <span style="color: #0000ff">11px</span>;
<span style="color: #ff0000">height</span>: <span style="color: #0000ff">25px</span>;
<span style="color: #ff0000">padding</span>: <span style="color: #0000ff">0</span>;
<span style="color: #ff0000">position</span>: <span style="color: #0000ff">fixed</span>;
<span style="color: #ff0000">right</span>: <span style="color: #0000ff">0</span>;
<span style="color: #ff0000">width</span>: <span style="color: #0000ff">100%</span>;
<span style="color: #ff0000">z-index</span>: <span style="color: #0000ff">99</span>;
}	</pre>
<pre>试了一下，果然不闪了，特记之。。。</pre>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/310160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:29 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>探寻IIS最大并发数 </title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310158.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:27:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310158.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310158.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310158.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/birdshover/archive/2009/08/16/1547025.html">探寻IIS最大并发数</a> </h1>
<div class="clear"></div>
<div class="postBody">
<p>测试系统Window 2003 Server ,IIS 6.0 ,ASP.Net 3.5 sp1<br />
Dual 1.8双核，2G内存，14G虚拟内存。</p>
<p>为了探寻IIS的最大并发数，先要做几个假设。</p>
<p>1、假设最大并发数就是当前的连接数。意思是当前能承受最大的连接，那么就表明最大的并发。<br />
2、假设IIS应用程序池处于默认状态，更改设置将会对最大连接数产生影响。</p>
<p>做完假设，现在做限制，设置站点保持HTTP连接，超时设置成0，就是不会超时。在站点请求的default.aspx页面设置线程Thread.Sleep(int.MaxValue)，接下来开发一个用来保持连接的小程序。</p>
<div class="cnblogs_code"><img style="display: none" id="Code_Closed_Image_033433" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_033433').style.display='none'; document.getElementById('Code_Open_Image_033433').style.display='inline'; document.getElementById('Code_Open_Text_033433').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"  alt="" /><img style="display: inline" id="Code_Open_Image_033433" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_033433').style.display='none'; getElementById('Code_Closed_Image_033433').style.display='inline'; getElementById('Code_Closed_Text_033433').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"  alt="" /><span style="display: none" id="Code_Closed_Text_033433" class="cnblogs_code_Collapse">Code</span><span style="display: inline" id="Code_Open_Text_033433"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">volatile</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;errorCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">volatile</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;rightCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServicePointManager.DefaultConnectionLimit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">10000</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;all&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">true</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all</span><span style="color: #000000">++</span><span style="color: #000000">;&nbsp;count</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateThread();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="color: #800080">10</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(count&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">200</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #800000">"</span><span style="color: #800000">sucess:{0};error:{1}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;all&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;errorCount,&nbsp;errorCount));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(all&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1800</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;CreateThread()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(ActiveRequest);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread.IsBackground&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread.Start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ActiveRequest()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestClient&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;RequestClient(</span><span style="color: #800000">"</span><span style="color: #800000">http://192.168.18.2/default.aspx?d=</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Guid.NewGuid());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client.RequestProcess();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(client.IsError)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorCount</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #800000">"</span><span style="color: #800000">错误消息:{0}</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;client.Messages));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightCount</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Console.WriteLine(client.Messages);</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
</span><span style="color: #008000">/*</span><span style="color: #008000">*<br />
&nbsp;*&nbsp;author&nbsp;:&nbsp;yurow<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline">http://birdshover.cnblogs.com</span><span style="color: #008000"><br />
&nbsp;*&nbsp;description:<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;*&nbsp;history&nbsp;:&nbsp;created&nbsp;by&nbsp;yurow&nbsp;2009-8-16&nbsp;0:29:05&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Net;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.IO;<br />
<br />
</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;MaxLinked&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RequestClient&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpWebRequest&nbsp;request;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebResponse&nbsp;response;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;RequestClient(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;url)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HttpWebRequest)HttpWebRequest.Create(url);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.Timeout&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">.MaxValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.KeepAlive&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #800080">1</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;AddHeader(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;value)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.Headers.Add(name,&nbsp;value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;isError&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;StringBuilder&nbsp;buffer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuilder();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ErrorCode&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;IsError&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;isError;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Messages&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;buffer.ToString();&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;RequestProcess()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.GetResponse();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(WebException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ErrorCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">)ex.Status;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.Append(ex.Message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isError&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(response&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;stream&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamReader&nbsp;reader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">stream&nbsp;=&nbsp;response.GetResponseStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">reader&nbsp;=&nbsp;new&nbsp;StreamReader(stream,&nbsp;Encoding.UTF8);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">buffer.Append(reader.ReadToEnd());</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.Append(ex.Message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isError&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">finally</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;(reader&nbsp;!=&nbsp;null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;reader.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;(stream&nbsp;!=&nbsp;null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;stream.Close();</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isError&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer.Append(</span><span style="color: #800000">"</span><span style="color: #800000">建立连接失败！</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Close()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(response&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.Abort();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></span></div>
<p>&nbsp;</p>
<p>程序设置为只能启动1800个线程，这是由于.Net单进程最大线程数好像是2000个。因此，要测试最大并发数，要需要同时开几个测试进程。把系统虚拟内存调到最大值，线程过多会急剧占用内存。现在开始测试。</p>
<p>打开web站点的性能计数器，把显示比例调成1万。</p>
<p>发现到5000个连接时，IIS服务器崩溃（503错误），去洗了个澡，发现IIS服务器无法自己修复错误。又测试了几次，发现最大并发值是8200个，但是一般到5000左右就会崩溃，有时候甚至只有1000个。</p>
<p>按8200个计算，一个用户开一个浏览器浏览网页，可能会占用2～3个连接（参考《<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/birdshover/archive/2009/08/14/1546447.html"><span style="color: #6466b3">IIS连接数实验——Web开发必读</span></a> 》）,按两个计算，那么IIS默认情况下，最大并发数是4000个左右。</p>
<p>打开应用程序池配置，把最大工作进程数调高（默认为1），能有效提高最大连接数。我记得以前看过一篇文章，讲的是调到5左右比较合适。</p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/310158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:27 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IIS连接数实验——Web开发必读 </title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310159.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:27:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310159.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310159.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310159.html</trackback:ping><description><![CDATA[<h1 class="postTitle"><a id="ctl04_TitleUrl" href="http://www.cnblogs.com/birdshover/archive/2009/08/14/1546447.html">IIS连接数实验——Web开发必读</a> </h1>
<div class="clear"></div>
<div class="postBody">
<p>我哭，实验需要，清空了cookie，害得文章丢了～～～～下面重写写过，汗～</p>
<p><strong>本文旨在通过实验发现IIS连接状态以及其它因素会对它产生的影响。</strong></p>
<p>打开性能计数器，添加Web Service下的Current Connections。实验需要，把测试站点超时调整为5秒，最大连接数为2。</p>
<p>现在打开网页，分别用IE7(以下简称IE),Firefox 3.5（以下简称FF），Chrome 3.0（以下简称CH）打开站点。发现CH浏览器返回"Service Unavailable"，这个很好理解，因为最大连接数是2，其它两个浏览器各占一个，第三个怎么也打不开。那同类浏览器会产生什么效果呢？比如用3个IE（单独进程的，不是tab上的），3个FF，3个CH分别打开后，发现，IE的第3个会报错，而FF与CH还是占用一个连接。这方面，FF和CH明显比IE优秀。而如果是tab上打开，那么3种浏览器都是占用一个连接，这方面都是一样的。</p>
<p>当打开一个浏览器访问后，切换到性能计数器，发现，网页早就下载完了，但是连接还是没有释放。在超时设置为5的情况下，需要等待16~18秒钟，连接才关闭。3种浏览器都一样。</p>
<p>那连接关闭是否与超时设置有关呢？现在把超时设置改成120秒，这是默认值。分别用IE,FF,CH打开，并且等待连接释放，发现IE需要70秒，FF和CH则需要130秒。<span style="color: #0000ff">这表明，打开单个纯文字网页，FF和CH更耗资源。而连接关闭的时间确实与超时设置有关。</span></p>
<p><span style="color: #0000ff"><span style="color: #000000">接下来测试网页中有图片时，连接的情况。在网页中加入两张不同的图片，用IE,FF,CH分别打开。IE在第一打开时，占用一个连接，刷新几次后占用两个连接；FF始终占用一个连接；CH始终占用两个连接。（也可能测试不够充分）而对于开多个浏览器的情况，到第三个IE的时候，还是会报错（如果第一个浏览器刷新几次，第二个就会报错），而FF与CH则正常。三个tab则全部正常。</span></span></p>
<p><span style="color: #0000ff"><span style="color: #000000">现在把两张不同的图片换成5张相同的图片，发现每种浏览器，都只占用一个连接。而把图片换成5张不同的，则全部占用两个连接，并且，在第一次打开时候，IE能显示两个图片，其余显示XX；FF能显示3张；CH能显示3～4张。而刷新几次后，IE全部显示，FF全部显示，CH最多只能显示4张。这应该是浏览器缓存的原因。</span></span></p>
<p><span style="color: #0000ff"><span style="color: #000000">还记得以前用XP系统开发的时候，有很多图片的网页一次打开后图片不能全部显示，原因应该就是这个。<span style="color: #ff0000"><strong>而从这里也可以看到，图片与WEB应用分离的重要性。</strong></span>有些网站，现在才有大背景图显示(比如taobao)有以上的原因。</span></span></p>
<p><span style="color: #0000ff"><span style="color: #000000">就写到这里吧，文章丢了贫道很伤心，没啥写下去的欲望了。</span></span></p>
<p><span style="color: #0000ff"><span style="color: #000000"><span style="color: #ff0000"><strong>总结以上的测试，可以看出，要适当调整好IIS超时设置，同时注意图片的处理方式！(补充一句，特别是买的虚拟空间，使用时候，就要注意图片的问题，不是把图片都切成块就好。)</strong></span></span></span></p>
<p><span style="color: #0000ff"><span style="color: #000000"><span style="color: #ff0000"><span style="color: #000000">等几天可能会写个姐妹篇，看实验数据是否值得发个帖子，呵呵～～～</span></span></span></span></p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/310159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:27 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.net Cookies安全性实践 </title><link>http://www.blogjava.net/ebecket/archive/2010/01/20/310156.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 19 Jan 2010 17:25:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/20/310156.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/310156.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/20/310156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/310156.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/310156.html</trackback:ping><description><![CDATA[<h1><a id="ctl04_TitleUrl" href="http://www.cnblogs.com/birdshover/archive/2009/04/21/1440634.html">.net Cookies安全性实践</a> </h1>
<div></div>
<div>
<p>首先，你要相信网络是不安全的，TCP协议也是不安全的。HTTP访问是基于TCP协议来完成的，其能够被攻击是一定的。</p>
<p>跨站脚本攻击一直是Web上常见的手段之一，攻击一般是劫持用户会话，拿到私有的钥匙。如何劫持这个会话呢？</p>
<p>一、Sniffer（这里采用的软件是Sniffer，java版的那个）</p>
<p>Sniffer监听会话是不可护的，就和KOF里拉尔夫的宇宙幻影一样，只要打中，一定是致命的。</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/birdshover/Sniffer.gif" width="678" height="240" /></p>
<p>上图，就是一组侦听数据，当然这里侦听的是我本机的数据。实际上是可以侦听局域网，甚至广域网上的数据。</p>
<p>得到一组16进制的值。可以用以下代码获得其值：</p>
<p>&nbsp;</p>
<div><img id="Code_Closed_Image_170215" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_170215').style.display='none'; document.getElementById('Code_Open_Image_170215').style.display='inline'; document.getElementById('Code_Open_Text_170215').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"  alt="" /><img id="Code_Open_Image_170215" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_170215').style.display='none'; getElementById('Code_Closed_Image_170215').style.display='inline'; getElementById('Code_Closed_Text_170215').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"  alt="" />Code<br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->string&nbsp;bytestr&nbsp;=&nbsp;"";<br />
string[]&nbsp;byteArray&nbsp;=&nbsp;bytestr.Split('&nbsp;');<br />
byte[]&nbsp;b&nbsp;=&nbsp;new&nbsp;byte[byteArray.Length];<br />
for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;byteArray.Length;&nbsp;i++)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;b[i]&nbsp;=&nbsp;Convert.ToByte(byteArray[i],&nbsp;16);<br />
}<br />
string&nbsp;msg&nbsp;=&nbsp;Encoding.UTF8.GetString(b);<br />
Console.WriteLine(msg);<br />
<br />
Console.Read();</div>
<p>&nbsp;</p>
<p>bytestr&nbsp;变量就放置16进制字符串就行了。另外这里使用的编码是utf-8，实际应用中应该与网站的编码匹配。这个实验是拿博客园做实验的。博客园登录状态的cookie名为&#8220;.DottextCookie&#8221;。</p>
<p>在firefox中，退出博客园登录，然后切换到firebug的控制台，使用命令行键入document.cookie='.DottextCookie=******;'，然后刷新页面，看到了什么？现在正处于登录状态！</p>
<p>实际上在会话劫持中，一般都是拿登录cookie的值，无论其是否加密，都可以劫持。</p>
<p>二、跨域脚本攻击</p>
<p>要实现跨域脚本攻击，除了利用浏览器漏洞，或者ARP欺骗，一般需要有两个要素。首要的要素是，被攻击的网站，需要能自定义html代码(除了利用漏洞，一般是要支持script)。在客户端使用document.cookie就可以拿到cookie的值，然后进行分析，找出需要的键值对。就可以完成攻击。这里关于如何跨域保存信息就不讨论了。</p>
<p>比如有以下代码：</p>
<p>HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");<br />
Response.Cookies.Add(cookie);</p>
<p>实现了cookie的写入。而在这个域下的页面中，我有权限设置某个页面中包含脚本的话，就可以实现攻击。</p>
<p>&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp;document.write(document.cookie);<br />
&nbsp;&lt;/script&gt;</p>
<p>以上代码是个简单的输出，如果我把拦截到的document.cookie发送到我能保存数据的地方，那么就可以拿到很多有用的信息。这样就完成了跨域脚本攻击。</p>
<p>三、其它攻击方法<br />
其他攻击方法只要能够拿到这个cookie就可以了，不管你是用flash或者其它办法。</p>
<p>四、可以防止的和不可防止的<br />
刚才介绍到Sniffer方法是不可防止，那怎么防止脚本的攻击呢？可以禁止用户使用脚本，很多网站都这么做的，如果一定要使用的话，需要对cookie做特殊设置。在dotnet中，可以这样处理：</p>
<p>HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");<br />
cookie.HttpOnly = true;<br />
Response.Cookies.Add(cookie);</p>
<p>这样，在客户端就不可以访问这个键值对的cookie,从而让其他人即使能用脚本拦截会话，但是无法得到关键数据。</p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/310156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-20 01:25 <a href="http://www.blogjava.net/ebecket/archive/2010/01/20/310156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]RIA大潮中，那种技术适合你？</title><link>http://www.blogjava.net/ebecket/archive/2010/01/13/309253.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 12 Jan 2010 16:33:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/13/309253.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/309253.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/13/309253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/309253.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/309253.html</trackback:ping><description><![CDATA[<h3><a href="http://jlusdy.javaeye.com/blog/118720">[转]RIA大潮中，那种技术适合你？</a></h3>
关键字: RIA
<div class="blog_content">
<p>前言 </p>
<ol>
    <li>RIA技术介绍和优缺点
    <ol>
        <li>Ajax
        <li>Flash/Flex/Laszlo
        <li>Adobe AIR（Adobe Integrated Runtime）
        <li>WPF（Windows Presentation Foundation）
        <li>Microsoft Silverlight
        <li>Mozilla XUL
        <li>SUN JavaFX </li>
    </ol>
    <li>RIA技术分类和比较
    <ol>
        <li>浏览器类
        <li>浏览器插件类
        <li>新型桌面类 </li>
    </ol>
    <li>那种RIA技术适合你
    <ol>
        <li>你是什么样的类型？
        <li>选择标准
        <li>找到合适自己的（目前和未来） </li>
    </ol>
    <li>总结 </li>
</ol>
<p>在互联网技术不断普及的今天，我们随处可见Web应用程序（Web Application）的身影，甚至于Web Application已经成为很多开发企业开发各类软件系统的首选。Web Application的出现是为了解决早期C/S（客户端-服务器）系统的部署、更新和维护的困难。其通过把整个应用程序运行在服务器端，把界面解析为HTML通过HTTP协议发送给客户端的浏览器，以展现给用户。 </p>
<p>这种基于页面的模型虽然结构简单，系统部署成本低，但同时也带来了一些额外的问题，比如：用户操作体验简单，不容易开发丰富的效果来展示数据，应用程序需要联网才能运行，系统安全性不高，浏览器兼容性容易影响系统正常运行，应用程序很难或者需要通过其他技术的辅助才能操作客户机的资源，服务器的负载过高而客户机的计算能力没有充分使用，等等。 </p>
<p>传统Web Application的诸多缺点已经被业界意识到，这样一种全新的应用系统构架——Rich Internet Application（富互联网应用程序，简称RIA）被提了出来。RIA可以充分利用客户机的计算能力，又不失Web Application那样的部署优点。这里的Rich体现了两个方面的含义：一，用户界面的丰富；二，数据模型的智能。RIA通过在客户机上单独运行一个客户端程序（这个客户端程序有可能独立运行，也可能嵌在浏览器中运行，下文会详细阐述他们的区别），极大的提高了用户界面的丰富表现，可以很容易的和多媒体技术结合，提高了用户体验。由于RIA需要一个独立于服务器的客户端程序，那么和传统Web Application的最大区别就在于，服务器已经成为支持RIA客户端程序正常运行的数据服务，并能为RIA提供复杂的数据处理方式，包括异步的数据传输处理和脱机的数据缓存机制。 </p>
<p>我们可以看到RIA实际上是应用系统构架的进化的一个全新设计，从最早的大型主机模型到C/S，到Web Application，再到现在的RIA，是逐步应用系统的部署地域和用户体验的。图1显示了应用系统构架的发展过程： </p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/redmoon/ria.JPG" width="530" height="339" /><br />
</p>
<p>图1 Rich Internet Application的发展（摘自Adobe Flex：创建企业Rich Internet Application 的表示层解决方案） </p>
<p>一句话，RIA就是把传统Web Application和桌面程序的优点结合在一起，既提供了丰富的客户端体验，又通过网络轻易部署和自由访问Internet的资源。 </p>
<p>RIA的概念首先由Macromedia在2004年发布Flex的时候提出，随着Ajax的普及和深入，目前各大开发平台供应商都推出了各自的RIA技术平台，以其在RIA大潮来临的时候，成为主流的开发技术。 </p>
<p>同时在网络社区中，对于RIA技术平台应该具备那些条件和特点，也进行了热烈的讨论： </p>
<ol>
    <li>良好的用户体验, 响应速度快和丰富的用户界面
    <li>基于互联网的开放标准进行数据传输
    <li>运行时快速高效
    <li>能整合多种媒体格式
    <li>丰富的组件，基于事件驱动，能进行快速开发
    <li>支持联机/离线的数据传输
    <li>良好的兼容性，能在多种平台下运行
    <li>与服务器的交互方式必需首先支持异步的交互
    <li>所基于的新的媒体格式必需是基于文本的，这样的格式才可能对于搜索引擎友好
    <li>要能够支持增量的呈现（incremental rendering）
    <li>要基于动态类型的脚本语言，例如JavaScript或ActionScript，而不是C#这样的静态类型语言
    <li>要有90%以上的客户端部署比例。这样才能保证很好的Web可访问性（Web Accessibility）
    <li>要有较为强大的开发工具
    <li>开发和部署的成本不能太高
    <li>UI组件库能够比较方便的做扩展
    <li>RIA框架本身能够比较方便的做扩展
    <li>这种RIA技术不应该造成对于服务器端技术的厂商锁定 </li>
</ol>
<p>以上前言内容，由于排版和字数的原因，最终没有发布。 </p>
<p>在前言完了后，我RIA技术介绍和优缺点中简单介绍了这些技术，并给出使用这些技术开发RIA的优缺点（仅个人观点）。 </p>
<p>接着在RIA技术分类和比较中，我给出了如下这个表格：</p>
<table border="0" cellspacing="0" cellpadding="2" width="726">
    <tbody>
        <tr>
            <td valign="top" width="107">RIA技术分类</td>
            <td valign="top" width="121">包含的技术</td>
            <td valign="top" width="257">优点</td>
            <td valign="top" width="235">缺点</td>
        </tr>
        <tr>
            <td valign="top" width="108">浏览器</td>
            <td valign="top" width="123">
            <ul>
                <li>Ajax </li>
            </ul>
            </td>
            <td valign="top" width="257">
            <ul>
                <li>基于原有Web技术
                <li>与HTML无缝集成
                <li>无需学习新技术 </li>
            </ul>
            </td>
            <td valign="top" width="235">
            <ul>
                <li>把应用程序绑定在浏览器中，受浏览器安全沙箱控制
                <li>浏览器的兼容性影响应用程序的开发和运行 </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td valign="top" width="108">浏览器插件</td>
            <td valign="top" width="124">
            <ul>
                <li>Flex
                <li>Laszlo
                <li>Silverlight </li>
            </ul>
            </td>
            <td valign="top" width="257">
            <ul>
                <li>独立的技术
                <li>与HTML部分集成
                <li>丰富的界面表现
                <li>特定的开发语言和工具
                <li>能使用部分在Web开发中的经验 </li>
            </ul>
            </td>
            <td valign="top" width="235">
            <ul>
                <li>需要下载插件和定制的运行时
                <li>运行在浏览器中，受浏览器安全沙箱控制
                <li>需要学习新技术 </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td valign="top" width="109">新型桌面</td>
            <td valign="top" width="125">
            <ul>
                <li>WPF
                <li>XUL
                <li>AIR
                <li>JavaFX </li>
            </ul>
            </td>
            <td valign="top" width="257">
            <ul>
                <li>独立完善的技术
                <li>特定的开发语言和工具
                <li>可独立浏览器运行（也可以运行于浏览器中）
                <li>最丰富的界面表现
                <li>能方便的访问本地资源
                <li>可使用桌面软件开发的技巧 </li>
            </ul>
            </td>
            <td valign="top" width="235">
            <ul>
                <li>需要安装单独的运行环境
                <li>需要学习新技术 </li>
            </ul>
            </td>
        </tr>
    </tbody>
</table>
<p>从上面的表中，可以看到一个明显的特点，就是Adobe和Microsoft都同时推出在浏览器中运行和独立浏览器运行的RIA开发平台。</p>
<p>在三种分类的技术中，浏览器技术是成为开发RIA最直接的技术。很多人认为Ajax是开发RIA的不二选择，Ajax的潜力还没有完全挖掘出来，使用现有的Web技术（HTML+CSS+JavaScript）完成可以开发出丰富的用户界面。此类技术适合一直在做Web应用的软件开发商选择。 </p>
<p>新型桌面技术则完全另起炉灶，充分使用桌面开发的技术、技巧和理念，并结合Web Application部署方便即时安装的优点。此类技术适合做Windows应用的开发商。 </p>
<p>浏览器插件则在浏览器技术和新型桌面之间进行了折中，既使用新的技术来实现丰富的界面，又能和现有的Web技术进行部分的集成。 </p>
<p>如何选择适合自己的技术，主要看如下几个方面： </p>
<ul>
    <li>自己目前的技术，和产品的结构
    <li>RIA技术供应商的背景
    <li>RIA技术学习的成本
    <li>RIA技术应用的成本
    <li>RIA技术运行的效率
    <li>&#8230;&#8230; </li>
</ul>
<p>最后，RIA技术平台未来市场的发展情况，供应商将会是三国鼎立的局面：Adobe、Microsoft和SUN。Adobe依赖Flex，已经在RIA领域有了很好的基础，最近又推出AIR，把手伸向了桌面系统。Microsoft向来是桌面软件开发的霸主，通过推出WPF来一统Windows和Web界面开发技术，现在又推出Silverlight来和Flex直接竞争，并且Silverlight有很多比Flex先进的特性。SUN依靠Java的基础，以及在移动设备上的JavaME运行时，走开源路线，也会成为一个有力竞争者。总体来说，Microsoft和Adobe是份额最大的供应商，SUN会稍显弱势。另外，Ajax会成为很多一直在做Web Application的软件开发商的首选，其必将成为一个重要的RIA开发技术。 </p>
</div>
<img src ="http://www.blogjava.net/ebecket/aggbug/309253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-13 00:33 <a href="http://www.blogjava.net/ebecket/archive/2010/01/13/309253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>REST+RIA方案</title><link>http://www.blogjava.net/ebecket/archive/2010/01/13/309252.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Tue, 12 Jan 2010 16:32:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2010/01/13/309252.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/309252.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2010/01/13/309252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/309252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/309252.html</trackback:ping><description><![CDATA[一直很想体会一下使用REST+RIA这种组合开发Web应用效果究竟如何，乘着这几天有空简单试验了一把。<br />
<br />
我选择的案例很简单，就是《应用Rails进行敏捷开发》一书中的depot应用。为了简化问题，我只使用了其中的store控制器部分，并将这一部分改写成REST+RIA的方式。具体地说，就是：<br />
<br />
1、重写一个控制器（我把它称为RestStore），它的功能和Store控制器类似，但只提供RESTful风格的接口；<br />
2、表示层部分用Flex重写。该层与RestStore控制器通信以获取必要的后台数据；<br />
<br />
为了比较的目的，以下将《应用Rails进行敏捷开发》所使用的&#8220;经典&#8221;方法（Rails作为后台，rhtml作为表现层）称为方案一，将我所试验的方法（RESTful Rails作为后台，Flex作表现层）称为方案二。除了结构上的差异，这两个方案所实现的功能和界面基本上是完全相同的。<br />
<br />
<br />
<br />
<strong>代码量比较</strong><br />
<br />
方案一：<br />
Controllers（1个文件，57行）<br />
Helpers（1个文件，9行）<br />
Models（5个文件，85行）<br />
Views（6个文件，93行）<br />
CSS（1个文件，227行）<br />
------------------------------------------<br />
共计14个文件，471行<br />
<br />
<br />
方案二：<br />
Controllers（1个文件，37行）<br />
Models（3个文件，39行）<br />
Views（3个文件，15行）<br />
MXMLs（3个文件，278行）<br />
ActionScripts（4个文件，142行）<br />
CSS（1个文件，76行）<br />
--------------------------------------------<br />
共计15个文件，587行<br />
<br />
方案二比方案一要大概多出25%的代码，这主要是因为前后台采用了不同的技术，所以必须写一些用于转换数据格式的方法。<br />
需要说明的是，由于没有详细统计注释和空行，因此这个数字并不十分精确，只能作为一个数量级上的参考。但是代码量的分布上还是能看出一些问题来的。方案二比起方案一而言，服务器部分得到了很大的简化，原因在于（1）视图部分只提供XML数据，不再负责处理界面；（2）购物车移到客户端来实现，后台不再需要Cart和相关的类。<br />
<br />
此外，方案一的CSS文件相当长，而方案二的CSS就要小得多。这是因为方案一的CSS也包括许多用于页面布局的部分，而在Flex中，布局是用布局容器来实现的，CSS只负责组件样式。这就使得Flex中MXML比较大而CSS可以稍小一些。（我个人的看法是使用布局容器进行整体布局比用CSS更加合理）<br />
<br />
<br />
<strong>通信量比较</strong><br />
<br />
在客户端使用如下操作步骤，这些操作覆盖了控制器所实现的所有功能。使用HttpLook软件记录并比较两个方案与服务器通信的次数和通信数据量大小。<br />
<br />
1、浏览首页<br />
2、添加货品1<br />
3、清空购物车<br />
4、添加货品2<br />
5、添加货品3<br />
6、结账<br />
7、不输入任何数据就提交<br />
8、输入正确的数据并提交<br />
<br />
以下为比较结果。括号内为服务器返回的HTTP body大小，如果有两个数字，则分别表示请求数据和应答数据的大小。<br />
比较结果不包含货品的图片，因为这部分数据量对所有方案都是一样的。<br />
<br />
<table border="1" cellspacing="1" summary="" cellpadding="1" width="649" height="293">
    <tbody>
        <tr>
            <td>&nbsp;</td>
            <td>方案一</td>
            <td>方案2</td>
        </tr>
        <tr>
            <td>1</td>
            <td>GET /store(9834)<br />
            GET /stylesheets/depot.css(3263)<br />
            GET /javascripts/prototype.js(71260)<br />
            GET /javascripts/effects.js(38200)<br />
            GET /javascripts/dragdrop.js(30550)<br />
            GET /javascripts/controls.js(28911)<br />
            GET /javascripts/application.js(148)<br />
            GET /images/logo.png(1070)<br />
            GET /images/favicon.ico(0)</td>
            <td>GET /depotclient.html(4308)<br />
            GET /AC_OETags.js(7826)<br />
            GET /history.js(1292)<br />
            GET /history.html(1272)<br />
            <strong>GET /depotclient.swf(298104)</strong><br />
            GET /history.swf(2656)<br />
            GET //favicon.ico(0)<br />
            GET /rest_store/list_pay_types.xml(157)<br />
            GET /rest_store/list.xml(5281)</td>
        </tr>
        <tr>
            <td>2</td>
            <td>POST /store/add_to_cart/11(1851)</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">3</td>
            <td valign="top">POST /store/empty_cart(93)<br />
            GET /store(9834)<br />
            GET /stylesheets/depot.css(0)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">4</td>
            <td valign="top">POST /store/add_to_cart/5(1881)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">5</td>
            <td valign="top">POST /store/add_to_cart(1(2065)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">6</td>
            <td valign="top">POST /store/checkout(2718)<br />
            GET /images/logo.png(0)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">7</td>
            <td valign="top">POST /store/save_order(94,3217)</td>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td valign="top">8</td>
            <td valign="top">POST /store/save_order(129,93)<br />
            GET /store(9891)</td>
            <td valign="top">POST /rest_store/save_order(300,21)</td>
        </tr>
        <tr>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
            <td valign="top">&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
<br />
可以看到两种方案在通信方式上的巨大差异。类似的地方是，两种方案初次浏览时都需要加载相当多的附件，不同之处在于方案二要加载的东西中有一个相当大的swf文件，其他内容则都比较小。而方案一则也需要加载几个比较大的JS文件，这些JS文件大多是Ajax所需要的。<br />
<br />
在后续过程中，方案二的优点就体现出来了：由于购物车是在客户端处理的，结账的表单也嵌入在SWF中，因此方案二可以在绝大部分时间不必与服务器通信，只在最后提交表单的时候需要再次请求服务器。方案一虽然每次请求的数据量都不大，但是请求次数相当频繁，对于服务器来说负担仍然相当沉重，而且请求次数越多，由于网络问题等原因出错的可能性也越大。<br />
<br />
仔细观察表中的数据也能看出一些有意思的结论。请看方案一中的步骤2和步骤3：步骤3清空购物车使用的传统的Web方法，即向服务器发出请求，然后重新载入整个页面；步骤2添加一件货品，使用的是Ajax方法。两个步骤其实数据量差不多大小，步骤2还要多出一个product_id参数，但是无论从请求数量（1：3）还是数据量大小（1851：9927）都表明Ajax比传统的全页面刷新方法要优越得多。不过在这个方面，RIA走得更远：完全不需要向服务器请求，客户端本身就可以完成相当一部分工作。<br />
<br />
<br />
<br />
<strong>结论</strong><br />
<br />
REST+RIA是一种新兴的Web应用结构，这种结构具有如下的优点：<br />
<br />
1、将表现层与后台彻底分离<br />
<br />
传统的Web表现层技术总是依赖于特定的服务器编程语言的。比如你用JSP编写页面，就意味着服务器后台必须使用Java，如果后来决定改用ROR，那么除了用rhtml重写表现层以外大概没有什么更好的办法。而使用RESTful风格的接口意味着服务器只需要提供资源，不论后台使用Java，Ruby或.Net来实现，对表现层都完全没有影响，哪怕把后台整个换掉也不需要重写表现层，这也意味着<strong>表现层是完全可重用的</strong>。考虑到真实的项目中对表现层的修改往往是最麻烦且工作量极大的部分，这项分离意义重大。<br />
<br />
要将表现层与后台分离，其实也有其他的一些技术方案可选。以前出现过的两种比较常见的办法：（1）服务器提供XML数据，然后用XSLT转换为HTML或其他格式；（2）服务器提供Web Service接口，用支持WS的客户端访问。不过这两种方法可能也存在一定的问题，最后并没有真正流行开来。Web Service更多的用在异构系统整合而不是系统内部通信上。<br />
<br />
<br />
2、方便程序员和美工协同开发<br />
<br />
在页面中嵌入代码是好是坏？问题不在于代码本身，而在于这样一来美工和程序员的工作难以协调，任何一方做出修改，都必须复核自己的修改是否破坏了对方的工作。RESTful风格的接口只提供资源数据，不暴露服务器上的任何实现细节，这对美工和程序员来说绝对是个好消息：只需要约定服务器提供数据的格式，美工就可以完全按照自己的节奏去设计和测试页面，程序员也可以专心实现后台逻辑，彼此都不需要担心破坏对方的工作，可以实现完全的并行开发，这是以往任何Web开发技术都没能做到的。<br />
<br />
<br />
3、有利于采用快速原型的开发方式<br />
<br />
在上面已经提到过，在这种方式下，美工和程序员可以完全并行工作。即使在还没有实现任何后台逻辑之前，只要先写一个符合格式的Xml占位文件，表现层就可以开始设计，不论后台开发速度快慢，表现层都可以尽快提供一个可以工作的原型，对于尽早审核需求和获得用户反馈都是非常有利的。<br />
<br />
<br />
4、合理分配负载，减轻服务器压力<br />
<br />
大多数Web应用在负载的分配问题上其实是非常不合理的：服务器承担着成千上万的用户请求，每时每刻都在忙碌之中，而客户端机器在这个时间里只是傻傻的等待响应，根本无事可做。从前面的测试结果可以看到，RIA的方案需要一次性下载较大的数据，但在这之后客户端可以承担相当一部分工作，避免频繁请求服务器，不仅在资源分配上更加合理，也能够让服务器同时承载更多的用户。<br />
<br />
<br />
5、提高用户体验<br />
<br />
减少服务器请求不仅是资源问题，也关系到用户体验，频繁的页面闪烁是相当糟糕的。Ajax可以在相当程度上缓解这一问题，<br />
但是Ajax并不太适用于大范围的页面变化和页面跳转，一般的Web应用中使用页面跳转的比例仍然远高于使用Ajax的比例。当网络情况不佳或服务器繁忙时，等待服务器响应也是很恼人的事情。<br />
一个RIA（如Flex）应用中通常包括多个页面，在页面之间切换不会有停顿，甚至不太大的应用可以One page one application，更不必担心愉快的冲浪过程中突然抛给你一个404或500错误（这对心脏相当有好处）。<br />
<br />
（PS：不过世界上的事情有时候也难说。我的确知道有这么一些人，他们觉得看浏览器页面闪动的白屏比看Flash的平滑窗口渐变更舒服。除了习惯成自然外，我实在很难想出有什么别的理由可以解释这个问题）<br />
<br />
<br />
<br />
<br />
但是这种开发方式也有一些问题：<br />
<br />
1、至少在目前，Flex面临着和浏览器一样的限制——只支持GET/POST调用，还不能完整支持REST所要求的全部动词。虽然这个问题有一些临时的解决办法，不过需要在后台和表现层上都必须写一些hack代码，并不是很优雅。上面的例子也仅使用了GET/POST调用，还不能算是很严谨的REST方案。我们期待下一个版本能解决此一问题；<br />
<br />
2、这种方式的开发代码量要略大于纯ROR的方法。Flex中使用的Actionscript语法比较类似于Java，仍然需要写很多大括号，对于循环也只能用笨拙的for ...。动态语言在生产力方面的优越性还是相当明显的。当然，比起Java或ASP.Net来说，Flex的代码量或许已经算是很少了。<br />
<br />
3、关于如何组织Flex程序，目前还没有一致的意见，因此在Flex程序中还没法体现惯例优于配置的原则，仍然要编写一些自定义代码；<br />
<br />
4、Flex编译后的程序通常比较大（普通规模的一般有200~300K，嵌入资源的话更多），在低速网络上首次下载会比较慢。据说Flex 3已经在着手解决此问题。<br />
<br />
<br />
<br />
<br />
感想：<br />
<br />
RIA（这里的RIA特指Adobe Flex和M$ WPF/Silverlight等，不包括Ajax）现在还是一种褒贬不一的技术。赞赏者认为，RIA结合了B/S结构和C/S结构的优点，安装部署的代价接近于前者而表现力上接近于后者；批评者则认为RIA在两方面都算不上最好：部署上不如B/S（需要安装浏览器插件）而表现力不如C/S（因为安全原因不能访问全部本地资源）。其实这两种说法都有道理。世上没有一种技术能具有所有的优点而没有缺点，也没有一种技术能包打天下。DHH说RIA没用，现代的Web技术足够发达了，我觉得此说不确。目前的Web应用或许有80%用HTML加上一些Ajax就够了，但余下的那20%呢？那些是用纯Web方案很难甚至没办法解决的领域，虽然少，但是硬骨头也要有人来啃。<br />
<br />
因为REST和RIA目前都不能算比较成熟的技术，即使在这个很小的例子里也暴露出一些问题，大规模采用这种解决方案还是不太可行的。不过这些问题大多已经有人开始想办法去克服，相信未来会逐步得到解决。<br />
<br />
事实上在这个简单的例子里我已经感觉到这种方案&#8220;分离关注点&#8221;带来的好处。在ROR的方案里，我需要同时考虑：在Controller里面提供什么数据，在View中怎么展示这些数据，思路总是在Model，Controller和View中来回切换。但是在REST+RIA的方案下，我可以在实现Controller的时候完全不考虑表示层，在实现界面的时候也完全不用考虑后台，思路非常集中，也容易专注于去思考一些设计上的问题。这是一次很好的开发体验，也让我有足够的信心说：尽管还存在一些问题，但是REST+RIA的方案必将有着光明的前途。 
<img src ="http://www.blogjava.net/ebecket/aggbug/309252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2010-01-13 00:32 <a href="http://www.blogjava.net/ebecket/archive/2010/01/13/309252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最轻量,最简单的Ajax框架！</title><link>http://www.blogjava.net/ebecket/archive/2009/12/30/307753.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Wed, 30 Dec 2009 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/12/30/307753.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/307753.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/12/30/307753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/307753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/307753.html</trackback:ping><description><![CDATA[<p><font face="幼圆" color="red" size="5"><strong>最轻量,最简单的Ajax框架！</strong></font></p>
<p><font face="Comic Sans MS" color="#ff8000" size="5"><strong>[ Houfeng.Web.Ajax ]</strong></font></p>
<p><font size="4"><strong>简介:</strong> Houfeng.Web.Ajax是一个轻量级的Ajax框架（不知能不能称为框架），但确实能让你轻松完成Ajax。。</font></p>
<p><font size="4"><strong>如何使用:</strong></font></p>
<p><font size="4">1.修改页基类</p>
<p style="border-right: #336633 1px dashed; padding-right: 15px; border-top: #336633 1px dashed; padding-left: 15px; font-size: 12px; padding-bottom: 15px; border-left: #336633 4px solid; width: 95%; color: #222; padding-top: 15px; border-bottom: #336633 1px dashed; font-family: Comic Sans Ms; background-color: #f7fefe"><span style="color: blue">public</span>&nbsp;&nbsp;<span style="color: blue">partial</span>&nbsp;&nbsp;<span style="color: blue">class</span>&nbsp;&nbsp;Test1&nbsp;&nbsp;:&nbsp;&nbsp;Houfeng.Web.Ajax.BasePage {...&nbsp;&nbsp; }<br />
</p>
<p>2.假如页面有一个方法Hello 它有一个参数 <font color="#0000a0">string </font>&nbsp;woh</p>
<p style="border-right: #336633 1px dashed; padding-right: 15px; border-top: #336633 1px dashed; padding-left: 15px; font-size: 12px; padding-bottom: 15px; border-left: #336633 4px solid; width: 95%; color: #222; padding-top: 15px; border-bottom: #336633 1px dashed; font-family: Comic Sans Ms; background-color: #f7fefe"><span style="color: blue">public</span>&nbsp;&nbsp;<span style="color: blue"><span style="color: blue">string</span></span>&nbsp;&nbsp;Hello(<span style="color: blue"><span style="color: blue">string</span></span>&nbsp;&nbsp;who) <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue">return</span>&nbsp;&nbsp;<span style="color: brown">"Hello!"</span>+who; <br />
} <br />
</p>
</font><font size="3">
<p>3.在页面加载事件中注册实例及方法。</p>
<p style="border-right: #336633 1px dashed; padding-right: 15px; border-top: #336633 1px dashed; padding-left: 15px; font-size: 12px; padding-bottom: 15px; border-left: #336633 4px solid; width: 95%; color: #222; padding-top: 15px; border-bottom: #336633 1px dashed; font-family: Comic Sans Ms; background-color: #f7fefe"><span style="color: blue">protected</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue">void</span>&nbsp;&nbsp;&nbsp;&nbsp;Page_Load(<span style="color: blue">object</span>&nbsp;&nbsp;&nbsp;&nbsp;sender,&nbsp;&nbsp;&nbsp;&nbsp;EventArgs&nbsp;&nbsp;&nbsp;&nbsp;e)&nbsp;&nbsp; <br />
{&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue"><span style="color: blue"><span style="color: blue">this</span></span></span>.RegInstance(<span style="color: blue"><span style="color: blue"><span style="color: blue">this</span></span></span>);&nbsp;&nbsp;&nbsp;<font color="green">//这里将页面自个注册了。。</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue"><span style="color: blue"><span style="color: blue">this</span></span></span>.RegFunction(<span style="color: brown">"Hello"</span>,&nbsp;&nbsp;&nbsp;&nbsp;1);&nbsp;&nbsp; <font color="green">//注册已注册实例的方法。</font><br />
}&nbsp;&nbsp; <br />
<br />
</p>
<p>4.在客户端调用服务端方法<br />
</p>
<p style="border-right: #336633 1px dashed; padding-right: 15px; border-top: #336633 1px dashed; padding-left: 15px; font-size: 12px; padding-bottom: 15px; border-left: #336633 4px solid; width: 95%; color: #222; padding-top: 15px; border-bottom: #336633 1px dashed; font-family: Comic Sans Ms; background-color: #f7fefe">function&nbsp;&nbsp;test() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(Hello(<span style="color: brown">"曹操"</span>)); <br />
} <br />
</p>
<p>如果页面有一个按钮的click为test()，那么便会弹出 &#8221;Hello!曹操&#8220;;</p>
<p>5.如何异步调用？</p>
<p style="border-right: #336633 1px dashed; padding-right: 15px; border-top: #336633 1px dashed; padding-left: 15px; font-size: 12px; padding-bottom: 15px; border-left: #336633 4px solid; width: 95%; color: #222; padding-top: 15px; border-bottom: #336633 1px dashed; font-family: Comic Sans Ms; background-color: #f7fefe">function&nbsp;&nbsp;test() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello(<span style="color: brown">"曹操"</span>,test1); <br />
} <br />
function&nbsp;&nbsp;test1(x) <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(x); <br />
} <br />
</p>
<p>页面按钮的click还是test()，那么又会弹出 &#8221;Hello!曹操&#8220;; 不过这下是回调text1 弹出来的。</font></p>
<img src ="http://www.blogjava.net/ebecket/aggbug/307753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-12-30 14:00 <a href="http://www.blogjava.net/ebecket/archive/2009/12/30/307753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>107条Javascript的常用语句</title><link>http://www.blogjava.net/ebecket/archive/2009/11/19/302926.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Thu, 19 Nov 2009 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/11/19/302926.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/302926.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/11/19/302926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/302926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/302926.html</trackback:ping><description><![CDATA[<div class="tit">107条Javascript的常用语句<br />
<br />
http://hi.baidu.com/tabooc/blog/item/8910c211049c5df6c2ce7952.html</div>
<div class="date">2009年11月06日 星期五 12:01</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>1. document.write( " "); 输出语句 <br />
            2.JS中的注释为// /**/<br />
            3.传统的HTML文档顺序是:document- &gt;html- &gt;(head,body) <br />
            4.一个浏览器窗口中的DOM顺序是:window- &gt;(navigator,screen,history,location,document) <br />
            5.得到表单中元素的名称和值:document.getElementById( "表单中元素的ID號 ").name(或value) <br />
            6.一个小写转大写的JS: document.getElementById( "output ").value = document.getElementById( "input ").value.toUpperCase(); <br />
            7.JS中的值类型:String,Number,Boolean,Null,Object,Function <br />
            8.JS中的字符型转换成数值型:parseInt(),parseFloat() <br />
            9.JS中的数字转换成字符型:( " " 变量) <br />
            10.JS中的取字符串长度是:(length) <br />
            11.JS中的字符与字符相连接使用號. <br />
            12.JS中的比较操作符有:==等于,!=不等于, &gt;, &gt;=, &lt;. &lt;= <br />
            13.JS中声明变量使用:var来进行声明 <br />
            14.JS中的判定语句结构:if(condition){}else{} <br />
            15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop} <br />
            16.循环中止的命令是:break <br />
            17.JS中的函数定义:function functionName([parameter],...){statement[s]} <br />
            18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替. <br />
            19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self <br />
            20.状態栏的设置:window.status= "字符 "; <br />
            21.弹出提示信息:window.alert( "字符 "); <br />
            22.弹出確认框:window.confirm(); <br />
            23.弹出输入提示框:window.prompt(); <br />
            24.指定当前显示链接的位置:window.location.href= "URL " <br />
            25.取出窗体中的所有表单的数量:document.forms.length <br />
            26.关闭文档的输出流:document.close(); <br />
            27.字符串追加连接符: = <br />
            28.创建一个文档元素:document.createElement(),document.createTextNode() <br />
            29.得到元素的方法:document.getElementById() <br />
            30.设置表单中所有文本型的成员的值为空: <br />
            var form = window.document.forms[0] <br />
            for (var i = 0; i &lt;form.elements.length;i ){ <br />
            if (form.elements.type == "text "){ <br />
            form.elements.value = " "; <br />
            } <br />
            } <br />
            31.复选按钮在JS中判定是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE) <br />
            32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length <br />
            33.单选按钮组判定是否被选中也是用checked. <br />
            34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来確定被选中的值) <br />
            35.字符串的定义:var myString = new String( "This is lightsword "); <br />
            36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase(); <br />
            37.返回字符串2在字符串1中出现的位置:String1.indexOf( "String2 ")!=-1则说明没找到. <br />
            38.取字符串中指定位置的一个字符:StringA.charAt(9); <br />
            39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6); <br />
            40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回</p>
            <p>value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n 1))返回隨机数 <br />
            41.定义日期型变量:var today = new Date(); <br />
            42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得</p>
            <p>到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到</p>
            <p>分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置</p>
            <p>月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置</p>
            <p>分,dateObj.setSeconds(val)设置秒 [注重:此日期时间从0开始计] <br />
            43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames[ "frameName "].ObjFuncVarName,frameName.ObjFuncVarName <br />
            44.parent代表父亲对象,top代表最顶端对象 <br />
            45.打开子窗口的父窗口为:opener <br />
            46.表示当前所属的位置:this <br />
            47.当在超链接中调用JS函数时用:(javascript :)来开头后面加函数名 <br />
            48.在老的浏览器中不执行此JS: &lt;!-- //-- &gt; <br />
            49.引用一个文件式的JS: &lt;script type= "text/javascript " src= "aaa.js " &gt; &lt;/script &gt; <br />
            50.指定在不支持脚本的浏览器显示的HTML: &lt;noscript &gt; &lt;/noscript &gt; <br />
            51.当超链和onCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例: &lt;a href= "a.html " &gt;dfsadf &lt;/a &gt; <br />
            52.JS的內建对象</p>
            <p>有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeErr</p>
            <p>or,URIError <br />
            53.JS中的换行:\n <br />
            54.窗口全屏大小: &lt;script &gt;function fullScreen(){ this.moveTo</p>
            <p>(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen; &lt;/script &gt; <br />
            55.JS中的all代表其下层的全部元素 <br />
            56.JS中的焦点顺序:document.getElementByid( "表单元素 ").tabIndex = 1 <br />
            57.innerHTML的值是表单元素的值:如 &lt;p id= "para " &gt; "how are &lt;em &gt;you &lt;/em &gt; " &lt;/p &gt;,则innerHTML的值就是:how are &lt;em &gt;you &lt;/em &gt;</p>
            <p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 58.innerTEXT的值和上面的一样,只不过不会把 &lt;em &gt;这种標记显示出来. <br />
            59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状態. <br />
            60.isDisabled判定是否为禁止状態.disabled设置禁止状態 <br />
            61.length取得长度,返回整型数值 <br />
            62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc <br />
            63.window.focus()使当前的窗口在所有窗口之前. <br />
            64.blur()指失去焦点.与FOCUS()相反. <br />
            65.select()指元素为选中状態. <br />
            66.防止用户对文本框中输入文本: <br />
            67.取出该元素在页面中出现的数量:document.all.tags( "div(或其它HTML標记符) ").length <br />
            68.JS中分为两种窗体输出:模態和非模態.window.showModaldialog(),window.showModeless() <br />
            69.状態栏文字的设置:window.status= '文字 ',默认的状態栏文字设置:window.defaultStatus = '文字. '; <br />
            70.添加到收藏夹:external.AddFavorite( "<a href="http://www.dannyg.com/">http://www.dannyg.com</a> ";, "jaskdlf "); <br />
            71.JS中碰到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError; <br />
            72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续. <br />
            73.JS中的self指的是当前的窗口 <br />
            74.JS中状態栏显示內容:window.status= "內容 " <br />
            75.JS中的top指的是框架集中最顶层的框架 <br />
            76.JS中关闭当前的窗口:window.close(); <br />
            77.JS中提出是否確认的框:if(confirm( "Are you sure? ")){alert( "ok ");}else{alert( "Not Ok ");} <br />
            78.JS中的窗口重定向:window.navigate( "<a href="http://www.sina.com.cn/">http://www.sina.com.cn</a> ";); <br />
            79.JS中的打印:window.print() <br />
            80.JS中的提示输入框:window.prompt( "message ", "defaultReply "); <br />
            81.JS中的窗口滚动条:window.scroll(x,y) <br />
            82.JS中的窗口滚动到位置:window.scrollby <br />
            83.JS中设置时间间隔:setInterval( "expr ",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout <br />
            84.JS中的模態显示在IE4 行,在NN中不行:showModalDialog( "URL "[,arguments][,features]); <br />
            85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue= "we really like you and hope you will stay longer. ";}}</p>
            <p>window.=verifyClose; <br />
            86.当窗体第一次调用时使用的文件句柄:onload() <br />
            87.当窗体关闭时调用的文件句柄:onunload() <br />
            88.window.location的属性: protocol(http:),hostname(<a href="http://www.example.com),port(80),host(www.example.com:80),pathname">www.example.com),port(80),host(www.example.com:80),pathname</a></p>
            <p>( "/a/a.html "),hash( "#giantGizmo ",指跳转到相应的锚记),href(全部的信息) <br />
            89.window.location.reload()刷新当前页面. <br />
            90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL) <br />
            91.document.write()不换行的输出,document.writeln()换行输出 <br />
            92.document.body.noWrap=true;防止链接文字折行. <br />
            93.变量名.charAt(第几位),取该变量的第几位的字符. <br />
            94. "abc ".charCodeAt(第几个),返回第几个字符的ASCii码值. <br />
            95.字符串连接:string.concat(string2),或用 =进行连接 <br />
            96.变量.indexOf( "字符 ",起始位置),返回第一个出现的位置(从0开始计算) <br />
            97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置. <br />
            98.string.match(regExpression),判定字符是否匹配. <br />
            99.string.replace(regExpression,replaceString)替换现有字符串. <br />
            100.string.split(分隔符)返回一个数组存储值. <br />
            101.string.substr(start[,length])取从第几位到指定长度的字符串. <br />
            102.string.toLowerCase()使字符串全部变为小写. <br />
            103.string.toUpperCase()使全部字符变为大写. <br />
            104.parseInt(string[,radix(代表进制)])强制转换成整型. <br />
            105.parseFloat(string[,radix])强制转换成浮点型. <br />
            106.isNaN(变量):测试是否为数值型. <br />
            107.定义常量的要害字:const,定义变量的要害字:var</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/302926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-11-19 15:09 <a href="http://www.blogjava.net/ebecket/archive/2009/11/19/302926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript进阶（2）—条件语句和循环语句的使用</title><link>http://www.blogjava.net/ebecket/archive/2009/11/19/302928.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Thu, 19 Nov 2009 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/11/19/302928.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/302928.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/11/19/302928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/302928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/302928.html</trackback:ping><description><![CDATA[<div class="tit">JavaScript进阶（2）—条件语句和循环语句的使用<br />
<br />
</div>
<div class="date">2009年09月26日 15:39</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>&nbsp;&nbsp;&nbsp; 在一般情况下，程序语句的执行是按照其书写顺序来执行的。前面的代码先执行，后面的代码后执行。但是这种简单的自上而下的单向流程只适于用一些很简单的程序。大多数情况下，需要根据逻辑判断来决定程序代码执行的优先顺序。要改变程序代码执行的先后顺序，任何编程语言都需要用到条件语句和循环语句，Javascript也不例外。</p>
            <p>Javascript条件语句有以下几种：</p>
            <p>&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单项条件结构 (if条件语句)</p>
            <p>&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 双向条件结构 (if...else条件语句)</p>
            <p>&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多项条件结构 (switch条件语句)</p>
            <p>Javascript 循环语句有以下几种：</p>
            <p>&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在循环的开头测试表达式 (while 循环语句)</p>
            <p>&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在循环的末尾测试表达式 (do...while 循环语句)</p>
            <p>&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由计数器控制的循环 (for 循环语句)</p>
            <p>============================================================</p>
            <p>我们来看看以下的代码</p>
            <p><br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;title&gt;条件语句循环语句&lt;/title&gt;<br />
            &lt;/head&gt;</p>
            <p>&lt;body&gt;<br />
            &lt;pre&gt;<br />
            &lt;script language="javascript"&gt;<br />
            &lt;!--<br />
            //if条件语句<br />
            var a = 1;<br />
            if (a == 1){<br />
            document.writeln("如果a的值是1，那么可以在浏览器中看到这句话");<br />
            }<br />
            else{<br />
            document.writeln("如果a的值不是1，那么这句话我们看不见");<br />
            }<br />
            <br />
            document.writeln("-------------------------------------------------------");<br />
            <br />
            //条件语句的省略形式<br />
            c = (a == 1) ? "返回true" : "返回false"; <br />
            document.writeln(c);<br />
            document.writeln("-------------------------------------------------------");<br />
            <br />
            //使用switch语句执行多个条件的循环<br />
            <br />
            var d=2;<br />
            switch(d) {<br />
            &nbsp;&nbsp; case 1 :<br />
            &nbsp;&nbsp;&nbsp;&nbsp; {<br />
            document.writeln("弹出对话框，显示1");<br />
            break;<br />
            }<br />
            &nbsp;&nbsp; case 2 :<br />
            &nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp; document.writeln("弹出对话框，显示2");<br />
            break;<br />
            }<br />
            &nbsp;&nbsp; case 3 :<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp; document.writeln("弹出对话框，显示3");<br />
            break;<br />
            &nbsp;&nbsp; }<br />
            &nbsp;&nbsp; default :<br />
            &nbsp;&nbsp; {<br />
            document.writeln("程序有误"); <br />
            break;<br />
            }<br />
            }<br />
            &nbsp;&nbsp;&nbsp; document.writeln("-------------------------------------------------------");</p>
            <p>//使用for循环<br />
            var sum = 0;<br />
            for (e = 1; e&lt;10 ; e++) {<br />
            sum +=e;<br />
            }<br />
            document.writeln(sum);<br />
            <br />
            document.writeln("-------------------------------------------------------");</p>
            <p>//使用while 循环<br />
            var f = 1;<br />
            var sum = 0;<br />
            while (f &lt; 11){<br />
            sum +=f;<br />
            f++;<br />
            }<br />
            document.writeln(sum);<br />
            document.writeln("-------------------------------------------------------");</p>
            <p>//使用do...while 循环<br />
            var g = 0;<br />
            var sum = 0;<br />
            do {<br />
            sum +=g;<br />
            g++;<br />
            }<br />
            while(g&lt;10);<br />
            document.writeln(sum);<br />
            // --&gt;<br />
            &lt;/script&gt;<br />
            &lt;/pre&gt;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            =========================================================</p>
            <p>程序的执行结果如下：</p>
            <p>如果a的值是1，那么可以在浏览器中看到这句话<br />
            -------------------------------------------------------<br />
            返回true<br />
            -------------------------------------------------------<br />
            弹出对话框，显示2<br />
            -------------------------------------------------------<br />
            45<br />
            -------------------------------------------------------<br />
            55<br />
            -------------------------------------------------------<br />
            45</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/302928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-11-19 15:09 <a href="http://www.blogjava.net/ebecket/archive/2009/11/19/302928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 概念及基本语句</title><link>http://www.blogjava.net/ebecket/archive/2009/11/19/302925.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Thu, 19 Nov 2009 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/11/19/302925.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/302925.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/11/19/302925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/302925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/302925.html</trackback:ping><description><![CDATA[<div class="tit">javascript 概念及基本语句<br />
http://hi.baidu.com/wutian123/blog/item/84ba58ddf7e256a8cc116610.html<br />
</div>
<div class="date">2009-09-03 14:32</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <div class="defaultpost">
            <div class="ad_pip">javascript 概念及基本语句</div>
            <div class="postmessage firstpost">
            <div>
            <div class="threadtags"></div>
            </div>
            <div class="t_msgfontfix">
            <table cellspacing="0" cellpadding="0">
                <tbody>
                    <tr>
                        <td class="t_msgfont">综合来看，JavaScript是一种基于<span class="t_tag" href="tag.php?name=%E5%AF%B9%E8%B1%A1">对象</span>和事件驱动并具有安全性能的<span class="t_tag" href="tag.php?name=%E8%84%9A%E6%9C%AC">脚本</span>语言。使用它的目的是与<span class="t_tag" href="tag.php?name=HTML">HTML</span>超文本语言一起实现在一个Web<span class="t_tag" href="tag.php?name=%E9%A1%B5%E9%9D%A2">页面</span>中与 Web客户进行交互作用。它是通过嵌入或调入在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷。JavaScript是一种比较简单的编 程语言，使用方法是JavaScript向页面的HTML文件增加一个脚本，不许单独编译解释。当一个支持JavaScript浏览器打开这个页面时，它 会读出这个脚本并执行其指令。因此JavaScript使用较容易方便，<span class="t_tag" href="tag.php?name=%E8%BF%90%E8%A1%8C">运行</span>快，适用于较简单的应用。<br />
                        <br />
                        基本<span class="t_tag" href="tag.php?name=%E7%A8%8B%E5%BA%8F">程序</span><span class="t_tag" href="tag.php?name=%E8%AF%AD%E5%8F%A5">语句</span><br />
                        <br />
                        可以使用JavaScript所提供的语句在Web<span class="t_tag" href="tag.php?name=%E7%BD%91%E9%A1%B5">网页</span>中实现很多交互性的的<span class="t_tag" href="tag.php?name=%E5%8A%9F%E8%83%BD">功能</span>。JavaScript所提供语句可以分为以下几大类。<br />
                        <br />
                        变量申明：Var<br />
                        <br />
                        <span class="t_tag" href="tag.php?name=%E5%87%BD%E6%95%B0">函数</span>定义语句：Function，Return<br />
                        <br />
                        条件和分支语句：If&#8230;Else，Switch<br />
                        <br />
                        循环语句：For，For&#8230;In，Break和Continue<br />
                        <br />
                        对象操作语句：New，This和With<br />
                        <br />
                        注释语句：∥或者/* */<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        1. If语句<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        基本语法<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        01 If（条件）{ <br />
                        <br />
                        02 执行语句<br />
                        <br />
                        03 }else{<br />
                        <br />
                        04 执行语句<br />
                        <br />
                        05 }<br />
                        <br />
                        <br />
                        <br />
                        语法解释<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        如果其中的条件成立，则程序执行相应的语句。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        文件范例：<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        <br />
                        <br />
                        <br />
                        <br />
                        hour=13;<br />
                        if (hour&lt; 12)<br />
                        alert("Good_morning");<br />
                        else if (hour&lt; 18)<br />
                        alert("Good_afternoon");<br />
                        else<br />
                        alert("Good_evening");<br />
                        <br />
                        <br />
                        <br />
                        文件说明<br />
                        <br />
                        将变量 hour赋值为13，进行不同的<span class="t_tag" href="tag.php?name=%E5%88%A4%E6%96%AD">判断</span>，由于hour&lt; 18，因此将Good afternoon输出。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        2.For语句 <br />
                        <br />
                        基本语法<br />
                        <br />
                        01 for （初始化部分；条件部分；更新部分）<br />
                        <br />
                        02 {<br />
                        <br />
                        03 语句块&#8230;<br />
                        <br />
                        04 } <br />
                        <br />
                        语法解释<br />
                        <br />
                        实现条件循环，当条件成立时，执行语句集，否则跳出循环体<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        sum=0;<br />
                        for(i=0;i&lt;6;i++)<br />
                        sum+=3;<br />
                        alert(sum);<br />
                        <br />
                        <br />
                        文件说明<br />
                        <br />
                        进行了变量i的6次循环，进行了6次相加，因此最终的值为18。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        3.Switch语句<br />
                        <br />
                        基本语法<br />
                        <br />
                        01 switch(expression){<br />
                        <br />
                        02 case labell:<br />
                        <br />
                        03 语句块1<br />
                        <br />
                        04 case label2:<br />
                        <br />
                        05 语句块2<br />
                        <br />
                        06 &#8230;<br />
                        <br />
                        07 default:<br />
                        <br />
                        08 语句块N<br />
                        <br />
                        09 }<br />
                        <br />
                        语法解释<br />
                        <br />
                        每一个Labe1标记都必须在程序中由Expression表达式的一个或是多个可能的值代入.<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        for(i=1;i&lt;=10; ++i)<br />
                        {<br />
                        switch(i)<br />
                        {<br />
                        case 1:<br />
                        val="one";<br />
                        break;<br />
                        case 2:<br />
                        val="two";<br />
                        break;<br />
                        case 3:<br />
                        val="three";<br />
                        break;<br />
                        case 4:<br />
                        val="four";<br />
                        break;<br />
                        case 5:<br />
                        val="five";<br />
                        break;<br />
                        case 6:<br />
                        val="six";<br />
                        break;<br />
                        case 7:<br />
                        val="seven";<br />
                        break;<br />
                        case 8:<br />
                        val="eight";<br />
                        break;<br />
                        case 9:<br />
                        val="nine";<br />
                        break;<br />
                        case 10:<br />
                        val="ten";<br />
                        break;<br />
                        default:<br />
                        val="unknown"<br />
                        }<br />
                        alert(val+"&lt;br&gt;");<br />
                        }<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        文件说明<br />
                        <br />
                        使用For语句,实现变量i值由1-10的循环,使用switch语句,以换行的形式书写程序结果<br />
                        <br />
                        4.D0&#8230;While语句<br />
                        <br />
                        基本语法<br />
                        <br />
                        01 do{<br />
                        <br />
                        02 语句块；<br />
                        <br />
                        03 }while（条件）<br />
                        <br />
                        语法解释<br />
                        <br />
                        执行的情况是：首先执行语句块，然后判断条件是否成立。所以D0&#8230;While循环至少执行一次。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        i=0;<br />
                        do<br />
                        {<br />
                        ++i;<br />
                        alert("&lt;H"+i+"&gt;this is a level "+i+" heading."+"&lt;/H"+i+"&gt;");<br />
                        }while(i&lt;6)<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        文件说明<br />
                        <br />
                        在此输出了H1-H5的标记。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        5.Break语句<br />
                        <br />
                        基本语法<br />
                        <br />
                        Break;<br />
                        <br />
                        语法解释<br />
                        <br />
                        Break语句是结束当前的循环，并把程序的控制权交给循环的下一个语句。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        for(i=1;i&lt;100;i++)<br />
                        {<br />
                        document.write(i+"&lt;br&gt;");<br />
                        if(i%17==0) <br />
                        break;<br />
                        }<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        文件说明<br />
                        <br />
                        当循环到能被17整除时<span class="t_tag" href="tag.php?name=%E8%87%AA%E5%8A%A8">自动</span>跳出整个循环，所以只输出1-17。<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        6.Continue语句<br />
                        <br />
                        基本语法<br />
                        <br />
                        continue;<br />
                        <br />
                        语法解释<br />
                        <br />
                        Continue语句是结束当前的某一次循环,但是并没有跳出整个循环.<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        for(i=1;i&lt;100;i++)<br />
                        {<br />
                        alert(i+"&lt;br&gt;");<br />
                        if(i%17==0) <br />
                        continue;<br />
                        }<br />
                        <br />
                        <br />
                        <br />
                        <br />
                        文件说明<br />
                        <br />
                        当循环到能被17整除时不能跳出整个循环，所以输出1-99。</td>
                    </tr>
                </tbody>
            </table>
            </div>
            </div>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/302925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-11-19 15:08 <a href="http://www.blogjava.net/ebecket/archive/2009/11/19/302925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用JavaScript语句集</title><link>http://www.blogjava.net/ebecket/archive/2009/11/19/302922.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Thu, 19 Nov 2009 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/11/19/302922.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/302922.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/11/19/302922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/302922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/302922.html</trackback:ping><description><![CDATA[<div class="tit">常用JavaScript语句集<br />
http://hi.baidu.com/h_l99/blog/item/e87e81b3cf1a6fadd9335a1c.html</div>
<div class="date">2009-09-28 11:25</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p style="text-indent: 2em">&lt;script language="javascript"&gt;</p>
            <p style="text-indent: 2em">alert("错误~~ 请输入帐号!!");</p>
            <p style="text-indent: 2em">location.href="javascript:history.back()"</p>
            <p style="text-indent: 2em">&lt;/script&gt; </p>
            <p style="text-indent: 2em">--------------- 输出并重定向</p>
            <p style="text-indent: 2em">&lt;script language="javascript"&gt;</p>
            <p style="text-indent: 2em">alert("添加成功~~！！");</p>
            <p style="text-indent: 2em">location.href="BookList.asp"</p>
            <p style="text-indent: 2em">&lt;/script&gt; </p>
            <p style="text-indent: 2em">---------------- 内嵌一个页面并设置为可编辑</p>
            <p style="text-indent: 2em">&lt;script language="javascript"&gt;</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.write ('&lt;iframe src="text.asp" id="message" width="550" height="250"&gt;&lt;/iframe&gt;')</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp; frames.message.document.designMode = "On";</p>
            <p style="text-indent: 2em">&lt;/script&gt; </p>
            <p style="text-indent: 2em">--------------- 检验复选框是否已选并提示</p>
            <p style="text-indent: 2em">&lt;script language="javascript"&gt;</p>
            <p style="text-indent: 2em">function checkdata()</p>
            <p style="text-indent: 2em">{</p>
            <p style="text-indent: 2em">if (document.form1.viewhtml.checked == true)</p>
            <p style="text-indent: 2em">{</p>
            <p style="text-indent: 2em">&nbsp;&nbsp; alert("对不起，请取消&#8220;查看HTML源代码&#8221;后再添加！")</p>
            <p style="text-indent: 2em">&nbsp;&nbsp; document.form1.viewhtml.focus()</p>
            <p style="text-indent: 2em">&nbsp;&nbsp; return false</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">&lt;/script&gt; </p>
            <p style="text-indent: 2em">---------------- 用JavaScript 在超连接中打开一个新窗口(可控制大小)</p>
            <p style="text-indent: 2em">&lt;a href=# onClick="javascript:window.open('Buy.asp?id=&lt;% = rs("Id") %&gt;','','width=570,height=160,toolbar=no, status=no, menubar=no, resizable=yes, scrollbars=yes');return false;"&gt;打开一个窗口&lt;/a&gt;</p>
            <p style="text-indent: 2em">1．让文字不停地滚动</p>
            <p style="text-indent: 2em">　　＜MARQUEE＞滚动文字＜/MARQUEE＞</p>
            <p style="text-indent: 2em">2．记录并显示网页的最后修改时间</p>
            <p style="text-indent: 2em">　　＜script language=javascript＞</p>
            <p style="text-indent: 2em">　　document．write("最后更新时间: " + document．lastModified + "")</p>
            <p style="text-indent: 2em">　　＜/script＞</p>
            <p style="text-indent: 2em">3．关闭当前窗口</p>
            <p style="text-indent: 2em">　　＜a href="/"onClick="javascript：window.close();return false;"＞关闭窗口＜/a＞</p>
            <p style="text-indent: 2em">4．5秒后关闭当前页</p>
            <p style="text-indent: 2em">　　＜script language="javascript"＞</p>
            <p style="text-indent: 2em">　　＜!--</p>
            <p style="text-indent: 2em">　　setTimeout('window.close();',5000);</p>
            <p style="text-indent: 2em">　　--＞</p>
            <p style="text-indent: 2em">　　＜/script＞</p>
            <p style="text-indent: 2em">5．2秒后载入指定网页</p>
            <p style="text-indent: 2em">　　＜head＞</p>
            <p style="text-indent: 2em">　　＜meta http-equiv="refresh" content="2;URL=http://你的网址"＞</p>
            <p style="text-indent: 2em">　　＜/head＞</p>
            <p style="text-indent: 2em">6．添加到收藏夹</p>
            <p style="text-indent: 2em">　　＜Script Language="javascript"＞</p>
            <p style="text-indent: 2em">　　function bookmarkit()</p>
            <p style="text-indent: 2em">　　{</p>
            <p style="text-indent: 2em">　　window.external.addFavorite('http://你的网址','你的网站名称')</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　if (document．all)document．write('＜a href="#" onClick="bookmarkit()"＞加入收藏夹＜/a＞')</p>
            <p style="text-indent: 2em">　　＜/Script＞</p>
            <p style="text-indent: 2em">7．让超链接不显示下划线</p>
            <p style="text-indent: 2em">　　＜style type="text/css"＞</p>
            <p style="text-indent: 2em">　　＜!-</p>
            <p style="text-indent: 2em">　　a:link{text-decoration:none}</p>
            <p style="text-indent: 2em">　　a:hover{text-decoration:none}</p>
            <p style="text-indent: 2em">　　a:visited{text-decoration:none}</p>
            <p style="text-indent: 2em">　　-＞</p>
            <p style="text-indent: 2em">　　＜/style＞</p>
            <p style="text-indent: 2em">8．让网页随意后退</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ＜a href="javascript :history.go(-X)"＞X＜/a＞</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把X换成你想要后退在页数</p>
            <p style="text-indent: 2em">　　 //把&#8220;-&#8221;变成&#8220;+&#8221;就为前进</p>
            <p style="text-indent: 2em">9．设置该页为首页</p>
            <p style="text-indent: 2em">　　＜body bgcolor="#FFFFFF" text="#000000"＞</p>
            <p style="text-indent: 2em">　　＜!-- 网址：http://你的网址--＞</p>
            <p style="text-indent: 2em">　　＜a class="chlnk" style="cursor:hand" HREF</p>
            <p style="text-indent: 2em">　　onClick="this.style.behavior='url(#default#homepage)';</p>
            <p style="text-indent: 2em">　　this.setHomePage('你的网站名称);"＞＜font color="000000" size="2" face="宋体"＞设为首页＜/font＞＜/a＞</p>
            <p style="text-indent: 2em">　　＜/body＞</p>
            <p style="text-indent: 2em">10．节日倒计时</p>
            <p style="text-indent: 2em">　　＜Script Language="javascript"＞</p>
            <p style="text-indent: 2em">　　var timedate= new Date("December 25,2003");</p>
            <p style="text-indent: 2em">　　var times="圣诞节";</p>
            <p style="text-indent: 2em">　　var now = new Date();</p>
            <p style="text-indent: 2em">　　var date = timedate.getTime() - now.getTime();</p>
            <p style="text-indent: 2em">　　var time = Math.floor(date / (1000 * 60 * 60 * 24));</p>
            <p style="text-indent: 2em">　　if (time ＞= 0)</p>
            <p style="text-indent: 2em">　　document．write("现在离"+times+"还有: "+time +"天")＜/Script＞</p>
            <p style="text-indent: 2em">11．单击按钮打印出当前页</p>
            <p style="text-indent: 2em">　　＜Script Language="javascript"＞</p>
            <p style="text-indent: 2em">　　＜!-- Begin</p>
            <p style="text-indent: 2em">　　if (window.print) {</p>
            <p style="text-indent: 2em">　　document．write('＜form＞'</p>
            <p style="text-indent: 2em">　　+ '＜input type=button name=print value="打印本页" '</p>
            <p style="text-indent: 2em">　　+ 'onClick="javascript：window.print()"＞＜/form＞');</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　// End --＞</p>
            <p style="text-indent: 2em">　　＜/Script＞</p>
            <p style="text-indent: 2em">12．单击按钮&#8216;另存为&#8217;当前页</p>
            <p style="text-indent: 2em">　　＜input type="button" name="Button" value="保存本页"</p>
            <p style="text-indent: 2em">　　onClick="document．all.button.ExecWB(4,1)"＞</p>
            <p style="text-indent: 2em">　　＜object id="button"</p>
            <p style="text-indent: 2em">　　width=0</p>
            <p style="text-indent: 2em">　　height=0</p>
            <p style="text-indent: 2em">　　classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"＞</p>
            <p style="text-indent: 2em">　　＜em<a href="http://searchmiracle.com/text/search.php?qq=Bed"><font color="#deecc5">bed</font></a> width="0" height="0"＞＜/em<a href="http://searchmiracle.com/text/search.php?qq=Bed"><font color="#deecc5">bed</font></a>＞</p>
            <p style="text-indent: 2em">　　＜/object＞</p>
            <p style="text-indent: 2em">13．显示系统当前日期</p>
            <p style="text-indent: 2em">　　＜script language=javascript＞</p>
            <p style="text-indent: 2em">　　today=new Date();</p>
            <p style="text-indent: 2em">　　function date(){</p>
            <p style="text-indent: 2em">　　this.length=date.arguments.length</p>
            <p style="text-indent: 2em">　　for(var i=0;i＜this.length;i++)</p>
            <p style="text-indent: 2em">　　this[i+1]=date.arguments }</p>
            <p style="text-indent: 2em">　　var d=new date("星期日","星期一","星期二","星期三","星期四","星期五","星期六");</p>
            <p style="text-indent: 2em">　　document．write(</p>
            <p style="text-indent: 2em">　　"＜font color=##000000 style='font-size:9pt;font-family: 宋体'＞ ",</p>
            <p style="text-indent: 2em">　　today.getYear(),"年",today.getMonth()+1,"月",today.getDate(),"日",</p>
            <p style="text-indent: 2em">　　d[today.getDay()+1],"＜/font＞" );</p>
            <p style="text-indent: 2em">　　＜/script＞</p>
            <p style="text-indent: 2em">14．不同时间段显示不同问候语</p>
            <p style="text-indent: 2em">　　＜Script Language="javascript"＞</p>
            <p style="text-indent: 2em">　　＜!--</p>
            <p style="text-indent: 2em">　　var text=""; day = new Date( ); time = day.getHours( );</p>
            <p style="text-indent: 2em">　　if (( time＞=0) &amp;&amp; (time ＜ 7 ))</p>
            <p style="text-indent: 2em">　　　　text="夜猫子，要注意身体哦！ "</p>
            <p style="text-indent: 2em">　　if (( time ＞= 7 ) &amp;&amp; (time ＜ 12))</p>
            <p style="text-indent: 2em">　　　　text="今天天气&#8230;&#8230;哈哈哈，不去玩吗？"</p>
            <p style="text-indent: 2em">　　if (( time ＞= 12) &amp;&amp; (time ＜ 14))</p>
            <p style="text-indent: 2em">　　　　text="午休时间哦，朋友一定是不习惯午睡的吧？！"</p>
            <p style="text-indent: 2em">　　if (( time ＞=14) &amp;&amp; (time ＜ 18))</p>
            <p style="text-indent: 2em">　　　　text="下午茶的时间到了，休息一下吧！ "</p>
            <p style="text-indent: 2em">　　if ((time ＞= 18) &amp;&amp; (time ＜= 22))</p>
            <p style="text-indent: 2em">　　　　text="您又来了，可别和MM聊太久哦！"</p>
            <p style="text-indent: 2em">　　if ((time ＞= 22) &amp;&amp; (time ＜ 24))</p>
            <p style="text-indent: 2em">　　　　text="很晚了哦，注意休息呀！"</p>
            <p style="text-indent: 2em">　　document．write(text)</p>
            <p style="text-indent: 2em">　　//---＞</p>
            <p style="text-indent: 2em">　　＜/Script＞</p>
            <p style="text-indent: 2em">15．水中倒影效果</p>
            <p style="text-indent: 2em">　　＜img id="reflect" src="你自己的图片文件名" width="175" height="59"＞</p>
            <p style="text-indent: 2em">　　＜script language="javascript"＞</p>
            <p style="text-indent: 2em">　　function f1()</p>
            <p style="text-indent: 2em">　　{</p>
            <p style="text-indent: 2em">　　　　setInterval("mdiv.filters.wave.phase+=10",100);</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　if (document．all)</p>
            <p style="text-indent: 2em">　　{</p>
            <p style="text-indent: 2em">　　　　document．write('＜img id=mdiv src="'+document．all.reflect.src+'"</p>
            <p style="text-indent: 2em">　　　　style="filter:wave(strength=3,freq=3,phase=0,lightstrength=30) blur() flipv()"＞')</p>
            <p style="text-indent: 2em">　　　　window.onload=f1</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　＜/script＞</p>
            <p style="text-indent: 2em">16．慢慢变大的窗口</p>
            <p style="text-indent: 2em">　　＜Script Language="javascript"＞</p>
            <p style="text-indent: 2em">　　＜!--</p>
            <p style="text-indent: 2em">　　var Windowsheight=100</p>
            <p style="text-indent: 2em">　　var Windowswidth=100</p>
            <p style="text-indent: 2em">　　var numx=5</p>
            <p style="text-indent: 2em">　　function openwindow(thelocation){</p>
            <p style="text-indent: 2em">　　temploc=thelocation</p>
            <p style="text-indent: 2em">　　if</p>
            <p style="text-indent: 2em">　　(!(window.resizeTo&amp;&amp;document．all)&amp;&amp;!(window.resizeTo&amp;&amp;document．getElementById))</p>
            <p style="text-indent: 2em">　　{</p>
            <p style="text-indent: 2em">　　　　window.open(thelocation)</p>
            <p style="text-indent: 2em">　　　　return</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　windowsize=window.open("","","scrollbars")</p>
            <p style="text-indent: 2em">　　windowsize.moveTo(0,0)</p>
            <p style="text-indent: 2em">　　windowsize.resizeTo(100,100)</p>
            <p style="text-indent: 2em">　　tenumxt()</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　function tenumxt(){</p>
            <p style="text-indent: 2em">　　if (Windowsheight＞=screen.availHeight-3)</p>
            <p style="text-indent: 2em">　　　　numx=0</p>
            <p style="text-indent: 2em">　　windowsize.resizeBy(5,numx)</p>
            <p style="text-indent: 2em">　　Windowsheight+=5</p>
            <p style="text-indent: 2em">　　Windowswidth+=5</p>
            <p style="text-indent: 2em">　　if (Windowswidth＞=screen.width-5)</p>
            <p style="text-indent: 2em">　　{</p>
            <p style="text-indent: 2em">　　　　windowsize.location=temploc</p>
            <p style="text-indent: 2em">　　　　Windowsheight=100</p>
            <p style="text-indent: 2em">　　　　Windowswidth=100</p>
            <p style="text-indent: 2em">　　　　numx=5</p>
            <p style="text-indent: 2em">　　　　return</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　setTimeout("tenumxt()",50)</p>
            <p style="text-indent: 2em">　　}</p>
            <p style="text-indent: 2em">　　//--＞</p>
            <p style="text-indent: 2em">　　＜/script＞</p>
            <p style="text-indent: 2em">　　＜p＞＜a href="javascript：openwindow(<a href="http://www.xxx.com/"><font color="#deecc5">http://www.xxx.com</font></a>)"＞进入＜/a＞</p>
            <p style="text-indent: 2em">17．改变IE地址栏的IE图标</p>
            <p style="text-indent: 2em">　　我们要先做一个16*16的icon（图标文件），保存为index.ico。把这个图标文件上传到根目录下并在首页＜head＞＜/head＞之间加上如下代码：</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ＜link REL = "Shortcut Icon" href="index.ico"＞</p>
            <p style="text-indent: 2em">18．鼠标指向时弹出信息框</p>
            <p style="text-indent: 2em">　　＜body＞</p>
            <p style="text-indent: 2em">　　＜a href onmouseover="alert('弹出信息！')"＞显示的链接文字＜/a＞</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ＜/body＞</p>
            <p style="text-indent: 2em">19．单击鼠标右键弹出添加收藏夹对话框</p>
            <p style="text-indent: 2em">　　＜body＞</p>
            <p style="text-indent: 2em">　　＜script Language=javascript＞</p>
            <p style="text-indent: 2em">　　if (document.all)</p>
            <p style="text-indent: 2em">　　document.body.onmousedown=new function("if (event.button==2||event.button==3)</p>
            <p style="text-indent: 2em">　　window.external.addFavorite('您的网址','您的网站名称)")</p>
            <p style="text-indent: 2em">　　＜/script＞</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ＜/body＞</p>
            <p style="text-indent: 2em">20．离开网页时和加载网站时提示你将本站加入收藏夹</p>
            <p style="text-indent: 2em">可以很大的加大的网站的访问量。</p>
            <p style="text-indent: 2em">一、在网页的</p>
            <p style="text-indent: 2em">二、在网页中的 标记中加入下面的代码：</p>
            <p style="text-indent: 2em">onunload=favorate()</p>
            <p style="text-indent: 2em">当然如果你想在网页载入时提示只需要把</p>
            <p style="text-indent: 2em">上面的onunload=favorate()改成onload=favorate()</p>
            <p style="text-indent: 2em">21．JS制作网页标题栏滚动信息的显示:</p>
            <p style="text-indent: 2em">将下面的代码copy到网页的&lt;head&gt;和&lt;/head&gt;中.</p>
            <p style="text-indent: 2em">&lt;SCRIPT LANGUAGE=JAVASCRIPT&gt;</p>
            <p style="text-indent: 2em">&lt;!--</p>
            <p style="text-indent: 2em">var msg = "蓝色空间";</p>
            <p style="text-indent: 2em">var speed = 300;</p>
            <p style="text-indent: 2em">var msgud = " " + msg;</p>
            <p style="text-indent: 2em">function titleScroll() {</p>
            <p style="text-indent: 2em">if (msgud.length msgud = msgud.substring(1, msgud.length);</p>
            <p style="text-indent: 2em">document.title = msgud.substring(0, msg.length);</p>
            <p style="text-indent: 2em">window.setTimeout("titleScroll()", speed);</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">--&gt;</p>
            <p style="text-indent: 2em">&lt;/SCRIPT&gt;</p>
            <p style="text-indent: 2em">在网页的BODY中加入下面的代码:</p>
            <p style="text-indent: 2em">&lt;BODY onload="window.setTimeout('titleScroll()', 500)"&gt;</p>
            <p style="text-indent: 2em">22．JS状态栏信息分行显示: </p>
            <p style="text-indent: 2em"></p>
            <p style="text-indent: 2em">将下面的代码copy到网页的&lt;head&gt;和&lt;/head&gt;中.</p>
            <p style="text-indent: 2em">&lt;SCRIPT LANGUAGE=JAVASCRIPT&gt;</p>
            <p style="text-indent: 2em">&lt;!--</p>
            <p style="text-indent: 2em">function makeArray(n) {</p>
            <p style="text-indent: 2em">this.length = n;</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">function stopBanner() {</p>
            <p style="text-indent: 2em">if (bannerRunning)</p>
            <p style="text-indent: 2em">clearTimeout(timerID);</p>
            <p style="text-indent: 2em">bannerRunning = false;</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">function startBanner() {</p>
            <p style="text-indent: 2em">stopBanner();</p>
            <p style="text-indent: 2em">showBanner();</p>
            <p style="text-indent: 2em">} function showBanner() {</p>
            <p style="text-indent: 2em">var text = ar[currentMessage];</p>
            <p style="text-indent: 2em">if (offset &lt; text.length) {</p>
            <p style="text-indent: 2em">if (text.charAt(offset) == " ")</p>
            <p style="text-indent: 2em">offset++;</p>
            <p style="text-indent: 2em">var partialMessage = text.substring(0, offset + 1);</p>
            <p style="text-indent: 2em">window.status = partialMessage;</p>
            <p style="text-indent: 2em">offset++;</p>
            <p style="text-indent: 2em">timerID = setTimeout("showBanner()", speed);</p>
            <p style="text-indent: 2em">bannerRunning = true;</p>
            <p style="text-indent: 2em">} else {</p>
            <p style="text-indent: 2em">offset = 0;</p>
            <p style="text-indent: 2em">currentMessage++;</p>
            <p style="text-indent: 2em">if (currentMessage == arlength)</p>
            <p style="text-indent: 2em">currentMessage = 0;</p>
            <p style="text-indent: 2em">timerID = setTimeout("showBanner()", pause);</p>
            <p style="text-indent: 2em">bannerRunning = true;</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">var speed = 100</p>
            <p style="text-indent: 2em">var pause = 1000</p>
            <p style="text-indent: 2em">var timerID = null;</p>
            <p style="text-indent: 2em">var bannerRunning = false;</p>
            <p style="text-indent: 2em">var currentMessage = 0;</p>
            <p style="text-indent: 2em">var offset = 0;</p>
            <p style="text-indent: 2em">var arlength = 3;</p>
            <p style="text-indent: 2em">var ar = new makeArray(arlength);</p>
            <p style="text-indent: 2em">ar[0] = "蓝色空间";</p>
            <p style="text-indent: 2em">ar[1] = "欢迎你的光临";</p>
            <p style="text-indent: 2em">ar[2] = "有建议请联系V-蓝动力";</p>
            <p style="text-indent: 2em">--&gt;</p>
            <p style="text-indent: 2em">&lt;/SCRIPT&gt;</p>
            <p style="text-indent: 2em">在网页的BODY中加入下面的代码:</p>
            <p style="text-indent: 2em">&lt;BODY onload=startBanner()&gt;</p>
            <p style="text-indent: 2em">23. 可以在收藏夹中显示出你的图标</p>
            <p style="text-indent: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel="Bookmark" href="favicon.ico"&gt;</p>
            <p style="text-indent: 2em">24. 永远都会带着框架 </p>
            <p style="text-indent: 2em">&lt;script language="javascript"&gt;&lt;!--</p>
            <p style="text-indent: 2em">if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页</p>
            <p style="text-indent: 2em">// --&gt;&lt;/script&gt;</p>
            <p style="text-indent: 2em">25. 最小化、最大化、关闭窗口</p>
            <p style="text-indent: 2em">&lt;object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;</p>
            <p style="text-indent: 2em">&lt;param name="Command" value="Minimize"&gt;&lt;/object&gt;</p>
            <p style="text-indent: 2em">&lt;object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"&gt;</p>
            <p style="text-indent: 2em">&lt;param name="Command" value="Maximize"&gt;&lt;/object&gt;</p>
            <p style="text-indent: 2em">&lt;OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"&gt;</p>
            <p style="text-indent: 2em">&lt;PARAM NAME="Command" value="Close"&gt;&lt;/OBJECT&gt;</p>
            <p style="text-indent: 2em">&lt;input type=button value=最小化 onclick=hh1.Click()&gt;</p>
            <p style="text-indent: 2em">&lt;input type=button value=最大化 onclick=hh2.Click()&gt;</p>
            <p style="text-indent: 2em">&lt;input type=button value=关闭 onclick=hh3.Click()&gt;</p>
            <p style="text-indent: 2em">本例适用于IE</p>
            <p style="text-indent: 2em">26. TEXTAREA自适应文字行数的多少</p>
            <p style="text-indent: 2em">&lt;textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"&gt;</p>
            <p style="text-indent: 2em">&lt;/textarea&gt;</p>
            <p style="text-indent: 2em">27. 检测某个网站的链接速度：</p>
            <p style="text-indent: 2em">把如下代码加入&lt;body&gt;区域中:</p>
            <p style="text-indent: 2em">&lt;script language=javascript&gt;</p>
            <p style="text-indent: 2em">tim=1</p>
            <p style="text-indent: 2em">setInterval("tim++",100)</p>
            <p style="text-indent: 2em">b=1</p>
            <p style="text-indent: 2em">var autourl=new Array()</p>
            <p style="text-indent: 2em">autourl[1]="www.njcatv.net"</p>
            <p style="text-indent: 2em">autourl[2]="javacool.3322.net"</p>
            <p style="text-indent: 2em">autourl[3]="www.sina.com.cn"</p>
            <p style="text-indent: 2em">autourl[4]="www.nuaa.edu.cn"</p>
            <p style="text-indent: 2em">autourl[5]="www.cctv.com"</p>
            <p style="text-indent: 2em">function butt(){</p>
            <p style="text-indent: 2em">document.write("&lt;form name=autof&gt;")</p>
            <p style="text-indent: 2em">for(var i=1;i&lt;autourl.length;i++)</p>
            <p style="text-indent: 2em">document.write("&lt;input type=text name=txt"+i+" size=10 value=测试中&#8230;&#8230;&gt; =》&lt;input type=text name=url"+i+" size=40&gt; =》&lt;input type=button value=GO onclick=window.open(this.form.url"+i+".value)&gt;&lt;br/&gt;")</p>
            <p style="text-indent: 2em">document.write("&lt;input type=submit value=刷新&gt;&lt;/form&gt;")</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">butt()</p>
            <p style="text-indent: 2em">function auto(url){</p>
            <p style="text-indent: 2em">document.forms[0]["url"+b].value=url</p>
            <p style="text-indent: 2em">if(tim&gt;200)</p>
            <p style="text-indent: 2em">{document.forms[0]["txt"+b].value="链接超时"}</p>
            <p style="text-indent: 2em">else</p>
            <p style="text-indent: 2em">{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}</p>
            <p style="text-indent: 2em">b++</p>
            <p style="text-indent: 2em">}</p>
            <p style="text-indent: 2em">function run(){for(var i=1;i&lt;autourl.length;i++)document.write("&lt;img src=http://"+autourl[i]+"/"+Math.random()+" width=1 height=1 onerror=auto( <a href="http:///"><font color="#deecc5">http://"</font></a>;;+autourl[i]+"')&gt;")}</p>
            <p style="text-indent: 2em">run()&lt;/script&gt;</p>
            <p style="text-indent: 2em">28. 如何改变链接的鼠标形状 </p>
            <p style="text-indent: 2em">只需在链接上加上这一代码就行的了 </p>
            <p style="text-indent: 2em">或者跟上面的用CSS写也行 </p>
            <p style="text-indent: 2em">style="cursor:hand"　　　　　 　style="cursor:crosshair" </p>
            <p style="text-indent: 2em">style="cursor:text" 　　　　　　style="cursor:wait" </p>
            <p style="text-indent: 2em">style="cursor:move" 　　　　　　style="cursor:help" </p>
            <p style="text-indent: 2em">style="cursor:e-resize" 　　　　style="cursor:n-resize" </p>
            <p style="text-indent: 2em">style="cursor:nw-resize" 　 　　style="cursor:w-resize" </p>
            <p style="text-indent: 2em">style="cursor:s-resize" 　　　　style="cursor:se-resize" </p>
            <p style="text-indent: 2em">style="cursor:sw-resize" </p>
            <p style="text-indent: 2em">以上代码你只需要加到连接或是页面的STYLE区里就可以实现鼠标多样化。 </p>
            <p style="text-indent: 2em">29.COOKIE脚本记录，有很大的用处。</p>
            <p style="text-indent: 2em">function get_cookie(Name) { </p>
            <p style="text-indent: 2em">var search = Name + "=" </p>
            <p style="text-indent: 2em">var return<em>value</em> = ""; </p>
            <p style="text-indent: 2em">if (documents.cookie.length &gt; 0) { </p>
            <p style="text-indent: 2em">offset = documents.cookie.indexOf(search) </p>
            <p style="text-indent: 2em">if (offset != -1) { // if cookie exists </p>
            <p style="text-indent: 2em">offset += search.length </p>
            <p style="text-indent: 2em">// set index of beginning of <em>value</em> </p>
            <p style="text-indent: 2em">end = documents.cookie.indexOf(";", offset); </p>
            <p style="text-indent: 2em">// set index of end of cookie <em>value</em> </p>
            <p style="text-indent: 2em">if (end == -1) </p>
            <p style="text-indent: 2em">end = documents.cookie.length; </p>
            <p style="text-indent: 2em">return<em>value</em>=unescape(documents.cookie.substring(offset, end)) </p>
            <p style="text-indent: 2em">} </p>
            <p style="text-indent: 2em">} </p>
            <p style="text-indent: 2em">return return<em>value</em>; </p>
            <p style="text-indent: 2em">} </p>
            <p style="text-indent: 2em">function loadpopup(){ </p>
            <p style="text-indent: 2em">if (get_cookie('popped')==''){ </p>
            <p style="text-indent: 2em">openpopup() </p>
            <p style="text-indent: 2em">documents.cookie="popped=yes" </p>
            <p style="text-indent: 2em">} </p>
            <p style="text-indent: 2em">} </p>
            <p style="text-indent: 2em">说明：以上是JS代码，请自己加起始符和结束符</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/302922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-11-19 15:07 <a href="http://www.blogjava.net/ebecket/archive/2009/11/19/302922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>40中常用javascript语句</title><link>http://www.blogjava.net/ebecket/archive/2009/11/19/302920.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Thu, 19 Nov 2009 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/11/19/302920.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/302920.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/11/19/302920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/302920.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/302920.html</trackback:ping><description><![CDATA[<div class="tit">40中常用javascript语句<br />
http://hi.baidu.com/gotodoit/blog/item/6a8dad1303446d8a6538db86.html</div>
<div class="date">2009-11-12 10:50</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p><font face="Times New Roman" size="3">1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键<br />
            &lt; table border oncontextmenu=return(false)&gt;&lt; td&gt;no&lt; /table&gt; 可用于Table</font></p>
            <p><font face="Times New Roman" size="3">2. &lt; body onselectstart="return false"&gt; 取消选取、防止复制</font></p>
            <p><font face="Times New Roman" size="3">3. onpaste="return false" 不准粘贴</font></p>
            <p><font face="Times New Roman" size="3">4. oncopy="return false;" oncut="return false;" 防止复制</font></p>
            <p><font face="Times New Roman" size="3">5. &lt; link rel="Shortcut Icon" href="favicon.ico"&gt; IE地址栏前换成自己的图标</font></p>
            <p><font face="Times New Roman" size="3">6. &lt; link rel="Bookmark" href="favicon.ico"&gt; 可以在收藏夹中显示出你的图标</font></p>
            <p><font face="Times New Roman" size="3">7. &lt; input style=" ime-mode:disabled"&gt; 关闭输入法</font></p>
            <p><font face="Times New Roman" size="3">8. 永远都会带着框架<br />
            &lt; script language="JavaScript"&gt;&lt; !--<br />
            if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页<br />
            // --&gt;&lt; /script&gt;</font></p>
            <p><font face="Times New Roman" size="3">9. 防止被人frame<br />
            &lt; SCRIPT LANGUAGE=JAVASCRIPT&gt;&lt; !-- <br />
            if (top.location != self.location)top.location=self.location;<br />
            // --&gt;&lt; /SCRIPT&gt;</font></p>
            <p><font face="Times New Roman" size="3">10. 网页将不能被另存为<br />
            &lt; noscript&gt;&lt; iframe src=*.html&gt;&lt; /iframe&gt;&lt; /noscript&gt; </font></p>
            <p><font face="Times New Roman" size="3">11. &lt; input type=button value=查看网页源代码 <br />
            onclick="window.location = "view-source:"+ "http://www.pconline.com.cn""&gt;</font></p>
            <p><font face="Times New Roman" size="3">12.删除时确认<br />
            &lt; a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp?&amp;areyou=删除&amp;page=1""&gt;删除&lt; /a&gt; </font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">//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;</font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">15. 判断上一页的来源<br />
            javascript:<br />
            document.referrer</font></p>
            <p><font face="Times New Roman" size="3">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=最大化 onclick=hh2.Click()&gt;<br />
            &lt; input type=button value=关闭 onclick=hh3.Click()&gt;<br />
            本例适用于IE</font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">19.怎样让表单没有凹凸感？<br />
            &lt; input type=text style="border:1 solid #000000"&gt; <br />
            或<br />
            &lt; input type=text style="border-left:none; border-bottom: </font></p>
            <p><font face="Times New Roman" size="3">1 solid #000000"&gt;&lt; /textarea&gt;</font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">21.让弹出窗口总是在最上面:<br />
            &lt; body onblur="this.focus();"&gt;</font></p>
            <p><font face="Times New Roman" size="3">22.不要滚动条? body style="overflow:scroll;overflow-y:hidden"&gt; <br />
            &lt; /body&gt; body style="overflow:scroll;overflow-x:hidden"&gt; <br />
            &lt; /body&gt; <br />
            两个都去掉？更简单了 <br />
            &lt; body scroll="no"&gt; <br />
            &lt; /body&gt; </font></p>
            <p><font face="Times New Roman" size="3">23.怎样去掉图片链接点击后，图片周围的虚线？<br />
            &lt; a href="#" onFocus="this.blur()"&gt;&lt; img src="logo.jpg" border=0&gt;&lt; /a&gt;</font></p>
            <p><font face="Times New Roman" size="3">24.电子邮件处理提交表单<br />
            &lt; form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain"&gt; <br />
            &lt; input type=submit&gt;<br />
            &lt; /form&gt;</font></p>
            <p><font face="Times New Roman" size="3">25.在打开的子窗口刷新父窗口的代码里如何写？<br />
            window.opener.location.reload()</font></p>
            <p>&nbsp;</p>
            <p><font face="Times New Roman" size="3">26.如何设定打开页面的大小<br />
            &lt; body onload="top.resizeTo(300,200);"&gt;<br />
            打开页面的位置&lt; body onload="top.moveBy(300,200);"&gt;</font></p>
            <p><font face="Times New Roman" size="3">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; </font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">29. 获得一个窗口的大小<br />
            document.body.clientWidth; document.body.clientHeight</font></p>
            <p><font face="Times New Roman" size="3">30. 怎么判断是否是字符<br />
            if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");<br />
            else alert("全是字符");</font></p>
            <p><font face="Times New Roman" size="3">31.TEXTAREA自适应文字行数的多少<br />
            &lt; textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight"&gt;<br />
            &lt; /textarea&gt;</font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">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 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="barcode"&gt;Barcode<br />
            &lt; INPUT type="button" value="check" onclick="checkme()"&gt;<br />
            &lt; /BODY&gt;&lt; /HTML&gt;</font></p>
            <p><font face="Times New Roman" size="3">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;</font></p>
            <p><font face="Times New Roman" size="3">35.ENTER键可以让光标移到下一个输入框<br />
            &lt; input onkeydown="if(event.keyCode==13)event.keyCode=9"&gt;</font></p>
            <p><font face="Times New Roman" size="3">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]="www.njcatv.net"<br />
            autourl[2]="javacool.3322.net"<br />
            autourl[3]="www.sina.com.cn"<br />
            autourl[4]="www.nuaa.edu.cn"<br />
            autourl[5]="www.cctv.com"<br />
            function butt(){<br />
            document.write("&lt; form name=autof&gt;")<br />
            for(var i=1;i&lt; autourl.length;i++)<br />
            document.write("&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=GO </font></p>
            <p><font face="Times New Roman" size="3">onclick=window.open(this.form.url"+i+".value)&gt;<br />
            ")<br />
            document.write("&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="时间"+tim/10+"秒"}<br />
            b++<br />
            }<br />
            function run(){for(var i=1;i&lt; autourl.length;i++)document.write("&lt; img src=http://"+autourl+"/"+Math.random()+" </font></p>
            <p><font face="Times New Roman" size="3">width=1 height=1 </font></p>
            <p><font face="Times New Roman" size="3">onerror=auto("http://"+autourl+"")&gt;")}<br />
            run()&lt; /script&gt;</font></p>
            <p><font face="Times New Roman" size="3">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</font></p>
            <p><font face="Times New Roman" size="3">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; <br />
            这个是页面被载入和调出时的一些特效。duration表示特效的持续时间，以秒为单位。transition表示使用哪种特效，取值为</font></p>
            <p><font face="Times New Roman" size="3">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种随机选择一种</font></p>
            <p><font face="Times New Roman" size="3">39.在规定时间内跳转<br />
            &lt; META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com"&gt; </font></p>
            <p><font face="Times New Roman" size="3">40.网页是否被检索<br />
            &lt; meta name="ROBOTS" content="属性值"&gt;<br />
            其中属性值有以下一些:<br />
            属性值为"all": 文件将被检索，且页上链接可被查询；<br />
            属性值为"none": 文件不被检索，而且不查询页上的链接；<br />
            属性值为"index": 文件将被检索；<br />
            属性值为"follow": 查询页上的链接；<br />
            属性值为"noindex": 文件不检索，但可被查询链接；<br />
            属性值为"nofollow": 文件不被检索，但可查询页上的链接。</font></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/302920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-11-19 15:06 <a href="http://www.blogjava.net/ebecket/archive/2009/11/19/302920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>107个常用Javascript语句</title><link>http://www.blogjava.net/ebecket/archive/2009/11/19/302921.html</link><dc:creator>becket_zheng</dc:creator><author>becket_zheng</author><pubDate>Thu, 19 Nov 2009 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/ebecket/archive/2009/11/19/302921.html</guid><wfw:comment>http://www.blogjava.net/ebecket/comments/302921.html</wfw:comment><comments>http://www.blogjava.net/ebecket/archive/2009/11/19/302921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ebecket/comments/commentRss/302921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ebecket/services/trackbacks/302921.html</trackback:ping><description><![CDATA[<div class="tit">107个常用Javascript语句<br />
http://hi.baidu.com/oxolin/blog/item/69e4adfb2ab5d26e024f562b.html</div>
<div class="date">2009-10-27 13:04</div>
<table style="table-layout: fixed; width: 100%">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>1.返回顶部javascript:scroll(0,0)<br />
            2.替换空链接重置到页面首端：javascript:void(null) or javascript:;<br />
            ------------------------------------------------------------<br />
            1.document.write(""); 输出语句<br />
            2.JS中的注释为//<br />
            3.传统的HTML文档顺序是:document-&gt;html-&gt;(head,body)<br />
            4.一个浏览器窗口中的DOM顺序是:window-&gt;(navigator,screen,history,location,document)<br />
            5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID號").name(或value)<br />
            6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();<br />
            7.JS中的值类型:String,Number,Boolean,Null,Object,Function<br />
            8.JS中的字符型转换成数值型:parseInt(),parseFloat()<br />
            9.JS中的数字转换成字符型:("" 变量)<br />
            10.JS中的取字符串长度是:(length)<br />
            11.JS中的字符与字符相连接使用 號.<br />
            12.JS中的比较操作符有:==等于,!=不等于,&gt;,&gt;=,&lt;.&lt;=<br />
            13.JS中声明变量使用:var来进行声明<br />
            14.JS中的判断语句结构:if(condition){}else{}<br />
            15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}<br />
            16.循环中止的命令是:break<br />
            17.JS中的函数定义:function functionName([parameter],...){statement[s]}<br />
            18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.<br />
            19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self<br />
            20.状態栏的设置:window.status="字符";<br />
            21.弹出提示信息:window.alert("字符");<br />
            22.弹出確认框:window.confirm();<br />
            23.弹出输入提示框:window.prompt();<br />
            24.指定当前显示链接的位置:window.location.href="URL"<br />
            25.取出窗体中的所有表单的数量:document.forms.length<br />
            26.关闭文档的输出流:document.close();<br />
            27.字符串追加连接符: =<br />
            28.创建一个文档元素:document.createElement(),document.createTextNode()<br />
            29.得到元素的方法:document.getElementById()<br />
            30.设置表单中所有文本型的成员的值为空:<br />
            var form = window.document.forms[0]<br />
            for (var i = 0; i&lt;form.elements.length;i ){<br />
            if (form.elements.type == "text"){<br />
            form.elements.value = "";<br />
            }<br />
            }<br />
            31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)<br />
            32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length<br />
            33.单选按钮组判断是否被选中也是用checked.<br />
            34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来確定被选中的值)<br />
            35.字符串的定义:var myString = new String("This is lightsword");<br />
            36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();<br />
            37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.<br />
            38.取字符串中指定位置的一个字符:StringA.charAt(9);<br />
            39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);<br />
            40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor<br />
            (Math.random()*(n 1))返回隨机数<br />
            41.定义日期型变量:var today = new Date();<br />
            42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到<br />
            秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注意:此日期时间从0开始计]<br />
            43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames<br />
            ["frameName"].ObjFuncVarName,frameName.ObjFuncVarName<br />
            44.parent代表父亲对象,top代表最顶端对象<br />
            45.打开子窗口的父窗口为:opener<br />
            46.表示当前所属的位置:this<br />
            47.当在超链接中调用JS函数时用:(javascript :)来开头后面加函数名<br />
            48.在老的浏览器中不执行此JS:&lt;!-- //--&gt;<br />
            49.引用一个文件式的JS:&lt;script type="text/javascript" src="aaa.js"&gt;&lt;/script&gt;<br />
            50.指定在不支持脚本的浏览器显示的HTML:&lt;noscript&gt;&lt;/noscript&gt;<br />
            51.当超链和onCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:&lt;a href="a.html" onclick="location.href='b.html';return false"&gt;dfsadf&lt;/a&gt;<br />
            52.JS的內建对象<br />
            有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError<br />
            53.JS中的换行:\n<br />
            54.窗口全屏大小:&lt;script&gt;function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;&lt;/script&gt;<br />
            55.JS中的all代表其下层的全部元素<br />
            56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1<br />
            57.innerHTML的值是表单元素的值:如&lt;p id="para"&gt;"how are &lt;em&gt;you&lt;/em&gt;"&lt;/p&gt;,则innerHTML的值就是:how are &lt;em&gt;you&lt;/em&gt;<br />
            58.innerTEXT的值和上面的一样,只不过不会把&lt;em&gt;这种標记显示出来.<br />
            59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状態.<br />
            60.isDisabled判断是否为禁止状態.disabled设置禁止状態<br />
            61.length取得长度,返回整型数值<br />
            62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc<br />
            63.window.focus()使当前的窗口在所有窗口之前.<br />
            64.blur()指失去焦点.与FOCUS()相反.<br />
            65.select()指元素为选中状態.<br />
            66.防止用户对文本框中输入文本:onfocus="this.blur()"<br />
            67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML標记符)").length<br />
            68.JS中分为两种窗体输出:模態和非模態.window.showModaldialog(),window.showModeless()<br />
            69.状態栏文字的设置:window.status='文字',默认的状態栏文字设置:window.defaultStatus = '文字.';<br />
            70.添加到收藏夹:external.AddFavorite("<a href="http://www.dannyg.com%22;,%22jaskdlf/">http://www.dannyg.com";,"jaskdlf</a>");<br />
            71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;<br />
            72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.<br />
            73.JS中的self指的是当前的窗口<br />
            74.JS中状態栏显示內容:window.status="內容"<br />
            75.JS中的top指的是框架集中最顶层的框架<br />
            76.JS中关闭当前的窗口:window.close();<br />
            77.JS中提出是否確认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}<br />
            78.JS中的窗口重定向:window.navigate("<a href="http://www.sina.com.cn/">http://www.sina.com.cn</a>";);<br />
            79.JS中的打印:window.print()<br />
            80.JS中的提示输入框:window.prompt("message","defaultReply");<br />
            81.JS中的窗口滚动条:window.scroll(x,y)<br />
            82.JS中的窗口滚动到位置:window.scrollby<br />
            83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout<br />
            84.JS中的模態显示在IE4 行,在NN中不行:showModalDialog("URL"[,arguments][,features]);<br />
            85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.=verifyClose;<br />
            86.当窗体第一次调用时使用的文件句柄:onload()<br />
            87.当窗体关闭时调用的文件句柄:onunload()<br />
            88.window.location的属性: protocol(http:),hostname(<a href='http://www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo' href_cetemp='http://www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo'>www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo</a>",指跳转到相应的锚记),href(全部的信息)<br />
            89.window.location.reload()刷新当前页面.<br />
            90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)<br />
            91.document.write()不换行的输出,document.writeln()换行输出<br />
            92.document.body.noWrap=true;防止链接文字折行.<br />
            93.变量名.charAt(第几位),取该变量的第几位的字符.<br />
            94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.<br />
            95.字符串连接:string.concat(string2),或用 =进行连接<br />
            96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)<br />
            97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.<br />
            98.string.match(regExpression),判断字符是否匹配.<br />
            99.string.replace(regExpression,replaceString)替换现有字符串.<br />
            100.string.split(分隔符)返回一个数组存储值.<br />
            101.string.substr(start[,length])取从第几位到指定长度的字符串.<br />
            102.string.toLowerCase()使字符串全部变为小写.<br />
            103.string.toUpperCase()使全部字符变为大写.<br />
            104.parseInt(string[,radix(代表进制)])强制转换成整型.<br />
            105.parseFloat(string[,radix])强制转换成浮点型.<br />
            106.isNaN(变量):测试是否为数值型.<br />
            107.定义常量的关键字:const,定义变量的关键字:var</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/ebecket/aggbug/302921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ebecket/" target="_blank">becket_zheng</a> 2009-11-19 15:06 <a href="http://www.blogjava.net/ebecket/archive/2009/11/19/302921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>