﻿<?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-emu in blogjava-随笔分类-web优化</title><link>http://www.blogjava.net/emu/category/31708.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 11 Jan 2012 23:55:42 GMT</lastBuildDate><pubDate>Wed, 11 Jan 2012 23:55:42 GMT</pubDate><ttl>60</ttl><item><title>学习了一下条件注释</title><link>http://www.blogjava.net/emu/archive/2012/01/11/368358.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Wed, 11 Jan 2012 11:51:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2012/01/11/368358.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/368358.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2012/01/11/368358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/368358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/368358.html</trackback:ping><description><![CDATA[以前只知道怎么让一段代码&#8220;仅对IE有效&#8221;，一直没研究过怎么&#8220;仅对IE无效&#8221;或者说&#8220;仅对非IE有效&#8221;，今天算搞懂了：<br /><br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">[if&nbsp;IE]&gt;&nbsp;IE才看得到，非IE看不到&nbsp;&lt;![endif]</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">[if&nbsp;!(IE)]&gt;&lt;!</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; ">&nbsp;IE看不到，非IE才看得到&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&lt;![endif]</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span></div><img src ="http://www.blogjava.net/emu/aggbug/368358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2012-01-11 19:51 <a href="http://www.blogjava.net/emu/archive/2012/01/11/368358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE这个bug真是弱爆了</title><link>http://www.blogjava.net/emu/archive/2011/08/08/355989.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Mon, 08 Aug 2011 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2011/08/08/355989.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/355989.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2011/08/08/355989.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/355989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/355989.html</trackback:ping><description><![CDATA[
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">HTML</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">BODY</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">SCRIPT&nbsp;</span><span style="color: rgb(255, 0, 0);">LANGUAGE</span><span style="color: rgb(0, 0, 255);">="JavaScript"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br /></span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;a</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">=</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&lt;!--</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">;<br />alert(a);<br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">SCRIPT</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">BODY</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">HTML</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><br />这样一段代码在IE下面居然语法解析错误！实在是弱到不知道怎么说好了。<br />当然，下面这一段代码，也不出意外的在IE下挂掉了<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">HTML</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">BODY</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">SCRIPT&nbsp;</span><span style="color: rgb(255, 0, 0);">LANGUAGE</span><span style="color: rgb(0, 0, 255);">="JavaScript"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br /></span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;a</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">=</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&lt;!--</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">;<br />alert(a);<br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">SCRIPT</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">SCRIPT&nbsp;</span><span style="color: rgb(255, 0, 0);">LANGUAGE</span><span style="color: rgb(0, 0, 255);">="JavaScript"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br /></span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;a</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">=</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">--&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">;<br />alert(a);<br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">SCRIPT</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">BODY</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">HTML</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><br /><br />终于明白为啥Editplus里面插入script标记的时候总是帮我加上 &lt;!-- 和 //--&gt;了，这俩货还真不能随便去掉。<br /><div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">HTML</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">BODY</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">SCRIPT&nbsp;</span><span style="color: rgb(255, 0, 0);">LANGUAGE</span><span style="color: rgb(0, 0, 255);">="JavaScript"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br /></span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&lt;!--</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"><br /></span><span style="color: rgb(0, 0, 255); background-color: rgb(245, 245, 245);">var</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&nbsp;a</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">=</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">&lt;!--</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span><span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">;<br />alert(a);<br /></span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);">//</span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);">--&gt;</span><span style="color: rgb(0, 128, 0); background-color: rgb(245, 245, 245);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">SCRIPT</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">BODY</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">HTML</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><br />这个就没事。<br />  
 
<img src ="http://www.blogjava.net/emu/aggbug/355989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2011-08-08 09:54 <a href="http://www.blogjava.net/emu/archive/2011/08/08/355989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>脚本绑定回调增强版：备用url可以失败重试</title><link>http://www.blogjava.net/emu/archive/2011/07/19/354660.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Tue, 19 Jul 2011 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2011/07/19/354660.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/354660.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2011/07/19/354660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/354660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/354660.html</trackback:ping><description><![CDATA[4年前写过一篇<a href="http://www.blogjava.net/emu/articles/129240.html">《脚本绑定回调》</a>&nbsp; 进行了一些有趣的尝试，这些尝试现在在一些web产品中已经应用了好几年了。这两年随着海外用户的增多，用户情况的复杂化，我们的服务部署也开始复杂化了，有一些用户访问A域名失败，访问B域名就可能很畅顺，另一些用户则相反。而且很多时候这并不是gslb这样的调度可以及时检测到和快速调整的，不由得想想，能不能进行失败重试呢？其实也很简单把4年前的代码改了一改，做了一个原理性的实验：<br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">HTML</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">HEAD</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">SCRIPT&nbsp;</span><span style="color: #FF0000; ">LANGUAGE</span><span style="color: #0000FF; ">="JavaScript"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; "><br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;isIE&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">!!</span><span style="background-color: #F5F5F5; color: #000000; ">window.ActiveXObject;<br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;useFragment</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">false</span><span style="background-color: #F5F5F5; color: #000000; ">;<br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;loadjs(url,callback,errcallback,url2,url3){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(isIE){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(useFragment){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;df&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;document.createDocumentFragment();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df.visitCountCallBack&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(data){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.onreadystatechange</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(data);<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;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;s&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;df.createElement(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">SCRIPT</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df.appendChild(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.onreadystatechange</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;(ec,cb,u2,u3){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; 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="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(s.readyState</span><span style="background-color: #F5F5F5; color: #000000; ">==</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">loaded</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)&nbsp;{<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;s.onreadystatechange</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<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;df</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<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;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(</span><span style="background-color: #F5F5F5; color: #000000; ">!</span><span style="background-color: #F5F5F5; color: #000000; ">u2){<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;&nbsp;ec();<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;}</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{<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;&nbsp;loadjs(u2,cb,ec,u3)<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;}<br />&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}(errcallback,callback,url2,url3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.src&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;url;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;i</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">new</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;ActiveXObject(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">htmlfile</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.open();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.parentWindow.visitCountCallBack</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(i){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(d){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.parentWindow.errcallback</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(d);<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;}(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.parentWindow.errcallback</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(ec,cb,u2,u3){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.parentWindow.errcallback</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; 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="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(</span><span style="background-color: #F5F5F5; color: #000000; ">!</span><span style="background-color: #F5F5F5; color: #000000; ">u2){<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;ec();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{<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;loadjs(u2,cb,ec,u3)<br />&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}(errcallback,callback,url2,url3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.write(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;script&nbsp;src=\</span><span style="background-color: #F5F5F5; color: #000000; ">""</span><span style="background-color: #F5F5F5; color: #000000; ">+url+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;&lt;\/script&gt;&lt;script&nbsp;defer&gt;setTimeout(\</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">errcallback()\</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,0)&lt;\/script&gt;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(i)i.close();</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">如果数据被cache，运行到这一行的时候有可能回调已经完成,窗口已经关闭。</span><span style="background-color: #F5F5F5; color: #008000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;i&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;document.createElement(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">IFRAME</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.style.display</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">none</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.callback</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(o){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(o);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.contentWindow.callback</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.src</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">about:blank</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.parentNode.removeChild(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.errcallback&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(ec,cb,u2,u3){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; 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="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(</span><span style="background-color: #F5F5F5; color: #000000; ">!</span><span style="background-color: #F5F5F5; color: #000000; ">u2){<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;ec();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="background-color: #F5F5F5; color: #0000FF; ">else</span><span style="background-color: #F5F5F5; color: #000000; ">{<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;loadjs(u2,cb,ec,u3)<br />&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}(errcallback,callback,url2,url3);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.src</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">javascript:\</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">script</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;visitCountCallBack(data){frameElement.callback(data)};</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">script</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">script&nbsp;src</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">'</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+url+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">'</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">script</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">script</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; ">setTimeout('frameElement.errcallback()',</span><span style="background-color: #F5F5F5; color: #000000; ">0</span><span style="background-color: #F5F5F5; color: #000000; ">)</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">script</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">""</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;init(){<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;spans&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;document.getElementsByTagName(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">span</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">for</span><span style="background-color: #F5F5F5; color: #000000; ">(</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;i</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">0</span><span style="background-color: #F5F5F5; color: #000000; ">;i</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">spans.length;i</span><span style="background-color: #F5F5F5; color: #000000; ">++</span><span style="background-color: #F5F5F5; color: #000000; ">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;id&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;spans[i].id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;url&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=a</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+</span><span style="background-color: #F5F5F5; color: #000000; ">id;</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">故意制造错误引发重试</span><span style="background-color: #F5F5F5; color: #008000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;url2&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=b</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+</span><span style="background-color: #F5F5F5; color: #000000; ">id;</span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">故意再次制造错误引发重试</span><span style="background-color: #F5F5F5; color: #008000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;url3&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.fcg?uin=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+</span><span style="background-color: #F5F5F5; color: #000000; ">id;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;callback&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(id){&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(data){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(id).innerHTML&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;data.visitcount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}(id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;errcallback&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(id){&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(id).innerHTML&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">无法连接到服务器</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}(id);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadjs(url,callback,errcallback,url2,url3);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">SCRIPT</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">HEAD</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">BODY&nbsp;</span><span style="color: #FF0000; ">onload</span><span style="color: #0000FF; ">="init()"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />12345(非法帐号)的访问量：</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">span&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="12345"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">span</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">BR</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />123456&nbsp;的访问量：</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">span&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000ff;">="123456"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">span</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">BR</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />20050606&nbsp;的访问量：</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">span&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="20050606"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">span</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">BR</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">BODY</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">HTML</span><span style="color: #0000FF; ">&gt;</span></div><br />故意在前两次请求中制造了错误，尝试到第三个url的时候才成功。<img src ="http://www.blogjava.net/emu/aggbug/354660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2011-07-19 20:50 <a href="http://www.blogjava.net/emu/archive/2011/07/19/354660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把css和js写到一个文件里面的增强版</title><link>http://www.blogjava.net/emu/archive/2011/07/19/354642.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Tue, 19 Jul 2011 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2011/07/19/354642.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/354642.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2011/07/19/354642.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/354642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/354642.html</trackback:ping><description><![CDATA[
<a href="http://www.blogjava.net/emu/archive/2011/07/19/354642.html"><font color="#336699">原文链接</font></a><br />
<br />
最早的方法发表在msdn上：<a href="http://blogs.msdn.com/b/shivap/archive/2007/05/01/combine-css-with-js-and-make-it-into-a-single-download.aspx"><br />
http://blogs.msdn.com/b/shivap/archive/2007/05/01/combine-css-with-js-and-make-it-into-a-single-download.aspx</a><br />
<br />
代码是像这样子的：<br />
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">&lt;!--</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"><br />
function&nbsp;test(){}<br />
&lt;!--&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&lt;!--</span><span style="color: rgb(0, 0, 0);">&nbsp;body&nbsp;{&nbsp;background</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">color:&nbsp;Aqua;&nbsp;}</span></div>
<br />
可是这样css就必须要全部放到一行里面了。我做了一点点小修改来试图可以合并多行的css或者多个css的内容进去：<br />
<div style="padding: 4px 5px 4px 4px; border: 1px solid rgb(204, 204, 204); width: 98%; font-size: 13px; word-break: break-all; background-color: rgb(238, 238, 238);"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">&lt;!--</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);"><br />
setTimeout('document.body.innerHTML="&lt;span&gt;Hello&nbsp;World&lt;/span&gt;"',0);<br />
&lt;!--&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&lt;!--</span><span style="color: rgb(0, 0, 0);">&nbsp;emu{emu:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">\<br />
/*</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">}<br />
span&nbsp;{&nbsp;background</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">color:&nbsp;#f00;&nbsp;}<br />
span&nbsp;{&nbsp;color:&nbsp;#0ff;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span></div>
<br />
这样对于css来说，只是多了一个无用的规则 <font color="red">emu:{emu:"/*"}</font><br />
而对于js来说，多了一行内容为 <font color="red">&lt;!-- emu{emu:"\</font> 的注释，以及一大块/*开始的，包含了所有css内容的注释。<br />
IE9、Firefox5、safari5、chrome14下通过。没装opera，不是太关心这货。<br />
&nbsp;
 
 
<img src ="http://www.blogjava.net/emu/aggbug/354642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2011-07-19 16:12 <a href="http://www.blogjava.net/emu/archive/2011/07/19/354642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么知道页面被放大缩小了</title><link>http://www.blogjava.net/emu/archive/2011/06/23/352894.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Thu, 23 Jun 2011 11:20:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2011/06/23/352894.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/352894.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2011/06/23/352894.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/352894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/352894.html</trackback:ping><description><![CDATA[有个投诉说页面变形了，一问才知道页面被用户不小心zoom了，这个情况最好是能对用户有个提示。写了个IE和firefox下检测zoom的demo：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.0&nbsp;Transitional//EN"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">HTML</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">BODY</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="output"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">SCRIPT&nbsp;</span><span style="color: #FF0000; ">LANGUAGE</span><span style="color: #0000FF; ">="JavaScript"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">&lt;!--</span><span style="background-color: #F5F5F5; color: #000000; "><br />(</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">(){<br />&nbsp;&nbsp;&nbsp;&nbsp;window.onresize</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">testZoom;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;_screenOriginalWidth</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">window.screen.width<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;testZoom(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(window.screen.width</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;</span><span style="background-color: #F5F5F5; color: #000000; ">_screenOriginalWidth){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">output</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">).innerHTML</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;br&gt;放大啦</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(window.screen.width</span><span style="background-color: #F5F5F5; color: #000000; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; ">_screenOriginalWidth){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">output</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">).innerHTML</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&lt;br&gt;缩小啦</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_screenOriginalWidth</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">window.screen.width<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />})()<br /></span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">--&gt;</span><span style="background-color: #F5F5F5; color: #008000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">SCRIPT</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">BODY</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">HTML</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span></div><img src ="http://www.blogjava.net/emu/aggbug/352894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2011-06-23 19:20 <a href="http://www.blogjava.net/emu/archive/2011/06/23/352894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何分析js代码的运行路径？</title><link>http://www.blogjava.net/emu/archive/2011/06/16/352445.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Thu, 16 Jun 2011 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2011/06/16/352445.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/352445.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2011/06/16/352445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/352445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/352445.html</trackback:ping><description><![CDATA[只是个最基础的想法了。具体的实践稍微复杂一些：<br />1 如果script是用src引入的，还要用xhr或者json方式来获得text，可能还需要搭个后台代理。<br />2 如果function是在命名空间的，可以直接递归for in命名空间去挖里面的public函数出来。<br />3 private的函数我看就算了，私有函数应该对自己负责，我们没有必要非去整人家的私货。<br /><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">HTML</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">BODY</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">SCRIPT&nbsp;</span><span style="color: #FF0000; ">LANGUAGE</span><span style="color: #0000FF; ">="JavaScript"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">&lt;!--</span><span style="background-color: #F5F5F5; color: #000000; "><br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;a(x,y,z){</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;b(x,y)</span><span style="background-color: #F5F5F5; color: #000000; ">*</span><span style="background-color: #F5F5F5; color: #000000; ">c(z)};<br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;b(x,y){</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;c(x)</span><span style="background-color: #F5F5F5; color: #000000; ">*</span><span style="background-color: #F5F5F5; color: #000000; ">c(y)};<br /></span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;c(x){</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;x</span><span style="background-color: #F5F5F5; color: #000000; ">+</span><span style="background-color: #F5F5F5; color: #000000; ">x};<br /><br /><br />setTimeout(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">alert(a(1,2,3))</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,</span><span style="background-color: #F5F5F5; color: #000000; ">0</span><span style="background-color: #F5F5F5; color: #000000; ">)<br /></span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">--&gt;</span><span style="background-color: #F5F5F5; color: #008000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">SCRIPT</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">SCRIPT&nbsp;</span><span style="color: #FF0000; ">LANGUAGE</span><span style="color: #0000FF; ">="JavaScript"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #000000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">&lt;!--</span><span style="background-color: #F5F5F5; color: #000000; "><br />(</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;(){<br />&nbsp;&nbsp;&nbsp;&nbsp;window._log</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">[];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;obj2str(o){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">var</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;r&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;[];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">if</span><span style="background-color: #F5F5F5; color: #000000; ">(</span><span style="background-color: #F5F5F5; color: #0000FF; ">typeof</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;o&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">==</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">string</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)&nbsp;</span><span style="background-color: #F5F5F5; color: #0000FF; ">return</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">""</span><span style="background-color: #F5F5F5; color: #000000; ">+o.replace(/([\'\</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\\])</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">g,</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\\$1</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">).replace(</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">(\n)</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">g,</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\\n</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">).replace(</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">(\r)</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">g,</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\\r</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">).replace(</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">(\t)</span><span style="background-color: #F5F5F5; color: #000000; ">/</span><span style="background-color: #F5F5F5; color: #000000; ">g,</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\\t</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)</span><span style="background-color: #F5F5F5; color: #000000; ">+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\</span><span style="background-color: #F5F5F5; color: #000000; ">""</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(typeof&nbsp;o&nbsp;==</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">undefined</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)&nbsp;return&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">undefined</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(typeof&nbsp;o&nbsp;==&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">object</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(o===null)&nbsp;return&nbsp;</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #0000FF; ">null</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(!o.length){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;in&nbsp;o)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.push(i+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+obj2str(o[i]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+r.join()+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">}</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; "><br />&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;for(var&nbsp;i&nbsp;=0;i&lt;o.length;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r.push(obj2str(o[i]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">[</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+r.join()+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">]</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; 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;return&nbsp;r;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;o.toString();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;log(s){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_log.push(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;s=document.getElementsByTagName(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">SCRIPT</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)[0].text;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;r=/function&nbsp;(\w+)\(/g;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fns=s.match(r);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i=0;i&lt;fns.length;i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn=fns[i].replace(r,</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">$</span><span style="background-color: #F5F5F5; color: #000000; ">1</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;window[fn]==</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window[fn]=(function(org,fn){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">进入:</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+fn+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\n调用参数：</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+obj2str(arguments));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;r=org.apply(null,arguments);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">退出:</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+fn+</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">\n返回值</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">+obj2str(r));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;r<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;})(window[fn],fn)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />})()<br />setTimeout(</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">alert(window._log.join('\\n\\n'))</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">,100)<br />//--&gt;<br />&lt;/SCRIPT&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<br /></span></div><span style="color: #0000ff;"></span><span style="color: #800000;"></span><span style="color: #0000ff;"></span><img src ="http://www.blogjava.net/emu/aggbug/352445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2011-06-16 17:38 <a href="http://www.blogjava.net/emu/archive/2011/06/16/352445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>弱视用户看到我们的页面是像这样的</title><link>http://www.blogjava.net/emu/archive/2010/06/22/324139.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Tue, 22 Jun 2010 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2010/06/22/324139.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/324139.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2010/06/22/324139.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/324139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/324139.html</trackback:ping><description><![CDATA[<p>看了苹果WWDC的无障碍设计部分，他们的开发人员就是这样来体验弱视用户的产品体验的，我们也来体验一下别人的痛苦吧。我们的页面有办法设计得让这群人也感受好一点吗，就像苹果正在做的<script>with(document.body.style)if("\v"=="v")filter="blur(add)";else textShadow="black 0 0 3px";</script></p><img src ="http://www.blogjava.net/emu/aggbug/324139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2010-06-22 11:33 <a href="http://www.blogjava.net/emu/archive/2010/06/22/324139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不可忽略的 cache-read time(缓存读取延迟时间) 瓶颈</title><link>http://www.blogjava.net/emu/archive/2010/04/09/317898.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Fri, 09 Apr 2010 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2010/04/09/317898.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/317898.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2010/04/09/317898.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/317898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/317898.html</trackback:ping><description><![CDATA[<p>小小和rizen尝试过定位一个cache-read耗费时间随机的变得很长的诡异问题，排除过了文件内容、文件类型、文件头等各种影响，但是很遗憾没有最终结论。emu那天看知道这个事情后猜测，会不会就是很简单的多个cache-read操作相互竞争堵塞导致的呢？这个其实很容易验证了。写了一个简单的小页面应用了一组图片，然后抓包重新打开页面，就看到下面这个图了：</p>
<p><br />
<img height="420" alt="" src="http://www.blogjava.net/images/blogjava_net/emu/cacheread.png" width="559" border="0" /><br />
<br />
第一个cache-read耗时0.2秒多，第二个（并行发起）0.3秒多，第三个0.4秒多，接下去每个图片的耗时差不多都比上一个慢0.1秒以上。结论很明显了，并发的cache-read会相互堵塞，非常严重的相互堵塞。<br />
以上抓包是在IE6下完成的。在IE7和IE8下面情况要好一些，但是问题性质是相同的。<br />
很多我们曾经以为cache的非常好速度应该非常快的web应用，也许其实存在着严重的cache-read速度瓶颈而不为我们所知。<br />
网上没有搜到太多关于cache-read时间的文章，看来真是个盲点。<br />
<br />
解决方案和网络延迟是类似的，减少cache-read请求，把多个小文件和小图片合并成大文件和大图片（而不要一厢情愿的以为小文件被浏览器缓存后会有很好的速度表现），区分优先级引用资源。还有一个可能有用的：交错的发起不可避免的异步动态网络请求和cache-read请求，让网络延迟和cache-read延迟时间叠加在一起，来节省用户实际要等待的时间。</p>
<img src ="http://www.blogjava.net/emu/aggbug/317898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2010-04-09 22:58 <a href="http://www.blogjava.net/emu/archive/2010/04/09/317898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE6不能用gzip压缩脚本，一个流毒甚广的谣言</title><link>http://www.blogjava.net/emu/archive/2010/03/31/317027.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Wed, 31 Mar 2010 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2010/03/31/317027.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/317027.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2010/03/31/317027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/317027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/317027.html</trackback:ping><description><![CDATA[很多人遇到IE6下面脚本不运行的问题，在网上搜索一番后，都会遭遇到这篇流毒甚广的文章<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/emu/4494/o_s.PNG" />&nbsp;<br />
<br />
<p>文章作者说&#8220;跑到微软那一查,给的答复让我吐血:<strong>Do not enable HTTP compression for the script files </strong><strong>请不要对脚本文件开启http压缩 </strong>只好在服务器端增加对浏览器的识别代码,如果是ie6,就不压缩脚本文件了 虽然脚本能运行了,可是用户体验就...&nbsp; 哎,我恨ie 6&#8221;</p>
<p>唉，说啥好呢？</p>
<p>真相是，微软的答复(<a href="http://support.microsoft.com/kb/327286/en-us?sid=64&amp;spid=2073">http://support.microsoft.com/kb/327286/en-us?sid=64&amp;spid=2073</a>) 里面提供了两个解决方案，其中第一个描述的稍微啰嗦了一点，被这个作者直接忽略掉了。第二个解决方案只有一句话，显然更容易被读懂：<br />
<br />
</p>
<div style="border-bottom: #666666 1px solid; border-left: #666666 1px solid; border-top: #666666 1px solid; border-right: #666666 1px solid">To work around this problem, you can do either of the following:
<p>If you use a Cache-Control: no-cache HTTP header to prevent the files from caching, remove that header. In some situations, if you substitute an Expires HTTP header, you do not trigger the problem.</p>
<p>-or-</p>
<p>Do not enable HTTP compression for the script files.</p>
</div>
<p><br />
Emu虽然英文比较烂，四级老考不过，为了方便大家还是翻译一下吧，不然又该有人读不下去了。<br />
<br />
</p>
<div style="border-bottom: #666666 1px solid; border-left: #666666 1px solid; border-top: #666666 1px solid; border-right: #666666 1px solid">&nbsp; 要规避此问题，你可以在下面两个方案中选一种：
<p><em>&nbsp;&nbsp;&nbsp; 1.如果你使用了Cache-Control: no-cache 这个&nbsp;HTTP 头来防止文件被缓存，移除这个头就好了。有些情况下，如果你用一个Expires头来代替（前面这个出问题的http头），（也可以起到相同作用而）不会触发这个问题。</em></p>
<p>&nbsp;&nbsp;&nbsp; 或者</p>
<em>&nbsp;&nbsp;&nbsp; 2.不要压缩脚本文件。</em> </div>
<br />
个人建议还是考虑第一方案。<br />
<br />
本文作为前面一篇翻译文章《<a href="http://www.blogjava.net/emu/archive/2010/02/18/313398.html">压缩，让网络更快</a>》的补充。
 <img src ="http://www.blogjava.net/emu/aggbug/317027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2010-03-31 11:37 <a href="http://www.blogjava.net/emu/archive/2010/03/31/317027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译]加速Javascript：DOM操作优化</title><link>http://www.blogjava.net/emu/archive/2010/03/01/314185.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Mon, 01 Mar 2010 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2010/03/01/314185.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/314185.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2010/03/01/314185.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/314185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/314185.html</trackback:ping><description><![CDATA[<p>原文：《Speeding up JavaScript: Working with the DOM》</p>
<p>作者： KeeKim Heng, Google Web Developer</p>
<p>在我们开发互联网富应用（RIA）时，我们经常写一些javascript脚本来修改或者增加页面元素，这些工作最终是DOM——或者说文档对象模型——来完成的，而我们的实现方式会影响到应用的响应速度。</p>
<p>DOM操作会导致浏览器重解析(reflow)，这是浏览器的一个决定页面元素如何展现的计算过程。直接修改DOM，修改元素的CSS样式，修改浏览器的窗口大小，都会触发重解析。读取元素的布局属性比如offsetHeithe或者offsetWidth也会触发重解析。重解析需要花费计算时间，因此重解析触发的越少，应用就会越快。</p>
<p>DOM操作通常要不就是修改已经存在的页面上的元素，要不就是创建新的页面元素。下面的4种优化方案覆盖了修改和创建DOM节点两种方式，帮助你减少触发浏览器重解析的次数。<br />
<br />
</p>
<p><span style="font-size: 18pt"><strong>方案一：通过CSS类名切换来修改DOM</strong></span>&nbsp;</p>
<p>这个方案让我们可以一次性修改一个元素和它的子元素的多个样式属性而只触发一次重解析。</p>
<p>需求：</p>
<p>（emu注：原文作者写到这里的时候脑子显然短路了一下，把后面的Out-of-the-flow DOM Manipulation模式要解决的问题给摆到这里来了，不过从示范代码中很容易明白作者真正想描述的问题，因此emu就不照翻原文了）</p>
<p>我们现在需要写一个函数来修改一个超链接的几个样式规则。要实现很简单，把这几个规则对应的属性逐一改了就好了。但是带来的问题是，每修改一个样式属性，都会导致一次页面的重解析。<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"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;selectAnchor(element)&nbsp;{<br />
&nbsp;&nbsp;element.style.fontWeight&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'bold';<br />
&nbsp;&nbsp;element.style.textDecoration&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'none';<br />
&nbsp;&nbsp;element.style.color&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'#</span><span style="color: #000000">000</span><span style="color: #000000">';<br />
}</span></div>
<p>&nbsp;</p>
<p><strong>解决方案</strong></p>
<p>要解决这个问题，我们可以先创建一个样式名，并且把要修改的样式规则都放到这个类名上，然后我们给超链接添加上这个新类名，就可以实现添加几个样式规则而只触发一次重解析了。这个模式还有个好处是也实现了表现和逻辑相分离。</p>
<p><br />
&nbsp;</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"><span style="color: #000000">.selectedAnchor&nbsp;{<br />
&nbsp;&nbsp;font</span><span style="color: #000000">-</span><span style="color: #000000">weight:&nbsp;bold;<br />
&nbsp;&nbsp;text</span><span style="color: #000000">-</span><span style="color: #000000">decoration:&nbsp;none;<br />
&nbsp;&nbsp;color:&nbsp;#</span><span style="color: #000000">000</span><span style="color: #000000">;<br />
}<br />
<br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;selectAnchor(element)&nbsp;{<br />
&nbsp;&nbsp;element.className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'selectedAnchor';<br />
}</span></div>
<br />
<strong><span style="font-size: 18pt"><strong>方案二：在非渲染区修改DOM</strong> </span></strong>
<p>（emu注：作者在这里再次脑子短路，把DocumentFragment DOM Generation模式的介绍提前到这里来了，emu只好再次发挥一下）<br />
上一个方案解决的是修改一个超链接的问题，当一次需要对很多个超链接进行相同修改的时候，这个方案就可以大显身手了。</p>
<p><strong>需求</strong></p>
<p>需求是这样的，我们要写一个函数来修改一个指定元素的子元素中所有的超链接的样式名（className）属性。要实现很简单，我们可以通过遍历每个超链接并且修改它们的样式名来完成任务。但是带来的问题就是，每修改一个超链接都会导致一次重解析。</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"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;updateAllAnchors(element,&nbsp;anchorClass)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;anchors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;element.getElementsByTagName('a');<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchors.length;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;length;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;anchors[i].className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchorClass;<br />
&nbsp;&nbsp;}<br />
}</span></div>
<br />
<p><strong>解决方案</strong></p>
<p>要解决这个问题，我们可以把被修改的指定元素从DOM里面移除，再修改所有的超链接，然后在把这个元素插入回到它原来的位置上。为了完成这个复杂的操作，我们可以先写一个可重用的函数，它不但移除了这个DOM节点，还返回了一个把元素插回到原来的位置的函数。</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"><span style="color: #008000">/*</span><span style="color: #008000">*<br />
&nbsp;*&nbsp;Remove&nbsp;an&nbsp;element&nbsp;and&nbsp;provide&nbsp;a&nbsp;function&nbsp;that&nbsp;inserts&nbsp;it&nbsp;into&nbsp;its&nbsp;original&nbsp;position<br />
&nbsp;*&nbsp;@param&nbsp;element&nbsp;{Element}&nbsp;The&nbsp;element&nbsp;to&nbsp;be&nbsp;temporarily&nbsp;removed<br />
&nbsp;*&nbsp;@return&nbsp;{Function}&nbsp;A&nbsp;function&nbsp;that&nbsp;inserts&nbsp;the&nbsp;element&nbsp;into&nbsp;its&nbsp;original&nbsp;position<br />
&nbsp;*</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;removeToInsertLater(element)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;parentNode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;element.parentNode;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;nextSibling&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;element.nextSibling;<br />
&nbsp;&nbsp;parentNode.removeChild(element);<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(nextSibling)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentNode.insertBefore(element,&nbsp;nextSibling);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentNode.appendChild(element);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;};<br />
}</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">function</span><span style="color: #000000">&nbsp;updateAllAnchors(element,&nbsp;anchorClass)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;insertFunction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;removeToInsertLater(element);<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;anchors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;element.getElementsByTagName('a');<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;length&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchors.length;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;length;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;anchors[i].className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchorClass;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;insertFunction();<br />
}</span></div>
<br />
<p><span style="font-size: large"><strong>方案三：一次性的DOM元素生成</strong></span></p>
<p>这个方案让我们创建一个元素的过程只触发一次重解析。在创建完元素以后，先进行所有需要的修改，最后才把它插入到DOM里面去就可以了</p>
<p><strong>需求</strong></p>
<p>需求是这样的，实现一个函数，往一个指定的父元素上插入一个超链接元素。这个函数要同时可以设置这个超链接的显示文字和样式类。我们可以这样做：创建元素，插入到DOM里面，然后设置相应的属性。这就要触发3次重解析。</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"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;addAnchor(parentElement,&nbsp;anchorText,&nbsp;anchorClass)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;element&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement('a');<br />
&nbsp;&nbsp;parentElement.appendChild(element);<br />
&nbsp;&nbsp;element.innerHTML&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchorText;<br />
&nbsp;&nbsp;element.className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchorClass;<br />
}</span></div>
<br />
<p><strong>解决方案</strong></p>
<p>很简单，我们只要把插入元素这个操作放到最后做，就可以只进行一次重解析了。</p>
<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">function</span><span style="color: #000000">&nbsp;addAnchor(parentElement,&nbsp;anchorText,&nbsp;anchorClass)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;element&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement('a');<br />
&nbsp;&nbsp;element.innerHTML&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchorText;<br />
&nbsp;&nbsp;element.className&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;anchorClass;<br />
&nbsp;&nbsp;parentElement.appendChild(element);<br />
}</span></div>
<br />
<p>不过，要是我们想要插入很多个超链接到一个元素里面的话，那么这个做法还是有问题：每插入一个超链接还是要触发一次重解析。下一个方案可以解决这个问题。</p>
<p><strong style="font-size: 18pt">方案四：通过文档片段对象（DocumentFragment）创建一组元素</strong></p>
<p>这个方案允许我们创建并插入很多个元素而只触发一次重解析。要实现这点需要用到所谓的文档片段对象（DocumentFragment）。我们先在DOM之外创建一个文档片段对象（这样它也就不需要解析和渲染），然后我们在文档片段对象中创建很多个元素，最后我们把这个文档片段对象中所有的元素一次性放到DOM里面去，只触发一次重解析。</p>
<p><strong>需求</strong></p>
<p><br />
我们要写一个函数，往一个指定的元素上面增加10个超链接。如果我们简单的直接插入10个超链接到元素上面，就会触发10次重解析。</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"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;addAnchors(element)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;anchor;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;anchor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement('a');<br />
&nbsp;&nbsp;&nbsp;&nbsp;anchor.innerHTML&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'test';<br />
&nbsp;&nbsp;&nbsp;&nbsp;element.appendChild(anchor);<br />
&nbsp;&nbsp;}<br />
}</span></div>
<br />
<p><strong>解决方案</strong></p>
<p>要解决这个问题，我们要先创建一个文档片段对象，然后把每个新创建的超链接都插入到它里面去。当我们把文档片段对象用appendChild命令插入到指定的节点时，这个文档片段对象的所有子节点就一起被插入到指定的元素里面，而且只需要触发一次重解析。<br />
<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"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;addAnchors(element)&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;anchor,&nbsp;fragment&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createDocumentFragment();<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;anchor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement('a');<br />
&nbsp;&nbsp;&nbsp;&nbsp;anchor.innerHTML&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'test';<br />
&nbsp;&nbsp;&nbsp;&nbsp;fragment.appendChild(anchor);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;element.appendChild(fragment);<br />
}</span></div>
<br />
<br />
<em style="font-size: 10pt">注意：如无特别声明，本文中引用的所有程序均不是Google开发，也与Google没有其他什么关系。这些程序引发的责任均由其开发者或者所有者自己承担，与google无关。</em>
<img src ="http://www.blogjava.net/emu/aggbug/314185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2010-03-01 17:20 <a href="http://www.blogjava.net/emu/archive/2010/03/01/314185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译] 压缩，让网络更快</title><link>http://www.blogjava.net/emu/archive/2010/02/18/313398.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Thu, 18 Feb 2010 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2010/02/18/313398.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/313398.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2010/02/18/313398.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/313398.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/313398.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 互联网上，每天有超过99人年浪费在下载未经压缩的内容上面。虽然支持压缩已经是每个现代的浏览器的标准功能了，但是它们的使用者们往往还是由于这样那样的原因不能下载到压缩的数据。这样就造成了带宽浪费并且拖慢了用户和网页的交互。&nbsp;&nbsp;<a href='http://www.blogjava.net/emu/archive/2010/02/18/313398.html'>阅读全文</a><img src ="http://www.blogjava.net/emu/aggbug/313398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2010-02-18 17:00 <a href="http://www.blogjava.net/emu/archive/2010/02/18/313398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE8下对cookie的限制。</title><link>http://www.blogjava.net/emu/archive/2009/10/29/300227.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Thu, 29 Oct 2009 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2009/10/29/300227.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/300227.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2009/10/29/300227.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/300227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/300227.html</trackback:ping><description><![CDATA[<p>emu测试了一下IE8，发现cookie的限制似乎比以前宽松多了。具体限制是：<br />
* 每个域名下允许50个cookie，超过了覆盖最早写入的cookie（或者说队列式管理，超过了第一个出队）<br />
* 同一个页面（和从这个页面发出的请求）子域、父域和根域各自有自己的50个cookie。<br />
* 单个cookie的总长度：cookieName+cookieValue+附加信息（包括等号，空格，分号，domain，expires，path之类的）不能超过5k（最多5119bytes）<br />
* 同一个页面（和从这个页面发出的请求）子域、父域和根域的全部cookie的内容长度（cookieName+cookieValue+等号，空格，分号）不能超过10k，否则全部变成httponly，无法用脚本访问</p>
* 同一个页面（和从这个页面发出的请求）子域、父域和根域的全部cookie的内容长度（cookieName+cookieValue+等号，空格，分号）不能超过50k。<br />
<br />
总而言之，cookie不是用来存数据的，能不用就别用。 <br />
<br />
边做测试边些博客的后果是，由于不停的清空cookie把博客的登陆态清掉了，差点文章提交失败重新写呵呵
<img src ="http://www.blogjava.net/emu/aggbug/300227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2009-10-29 18:50 <a href="http://www.blogjava.net/emu/archive/2009/10/29/300227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE8里，“about：”又回来了</title><link>http://www.blogjava.net/emu/archive/2009/05/22/277277.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Fri, 22 May 2009 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2009/05/22/277277.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/277277.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2009/05/22/277277.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/277277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/277277.html</trackback:ping><description><![CDATA[还记得IE6.0.2600以前的美好日子吗？那时我们多喜欢搞这种代码来节省一个http请求啊：<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: #800000">iframe&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="about:&lt;b&nbsp;style='color:red'&gt;hello&lt;/b&gt;&lt;script&gt;alert(123)&lt;/script&gt;"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">iframe</span><span style="color: #0000ff">&gt;</span></div>
<br />
当然还有这样的<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: #000000">showModalDialog(</span><span style="color: #000000">"</span><span style="color: #000000">about:&lt;b&nbsp;style='color:red'&gt;hello&lt;/b&gt;&lt;script&gt;alert(123)&lt;/script&gt;</span><span style="color: #000000">"</span><span style="color: #000000">)</span></div>
<br />
<br />
在IE6.0.2600以后，大家就只好转向更兼容的写法了：<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: #800000">iframe&nbsp;</span><span style="color: #ff0000">src</span><span style="color: #0000ff">="javascript:&amp;quot;&lt;b&nbsp;style='color:red'&gt;hello&lt;/b&gt;&lt;script&gt;alert(123)&lt;/script&gt;&amp;quot;"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">iframe</span><span style="color: #0000ff">&gt;</span></div>
<br />
今天偶然发现，IE8正式版下面，久违的&#8220;about：&#8221;又可以显示和执行了呵呵。
<img src ="http://www.blogjava.net/emu/aggbug/277277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2009-05-22 12:32 <a href="http://www.blogjava.net/emu/archive/2009/05/22/277277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Chrome浏览器第一次使用google gears组建的时候会有问题</title><link>http://www.blogjava.net/emu/archive/2009/01/13/251099.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Tue, 13 Jan 2009 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2009/01/13/251099.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/251099.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2009/01/13/251099.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/251099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/251099.html</trackback:ping><description><![CDATA[<a href="http://qzone.qq.com/blog/286013388-1231818216">http://qzone.qq.com/blog/286013388-1231818216</a><br />
<br />
<p>使用谷歌浏览器(chrome)的时候，有的时候脚本程序会捕获到&#8220;Uncaught TypeError: Object #&lt;an HTMLObjectElement&gt; has no method 'create' &#8221;这个错误，在chrome的用户论坛上也有人在问这个问题。</p>
<p>这个错误应该是由于最新版的谷歌浏览器没有自带完整的google gears组件导致的。看起来最新版的chrome浏览器会在用户第一次使用gears组件的时候自动下载和安装该组件，而在安装成功以前我们虽然可以成功创建 application/x-googlegears 对象，却无法调用它的create方法创建任何有用的东西。</p>
<p>这个时候其实没有太多的事情可以做，基本上我们我们只能检测这个对象的create接口是否存在，发现不存在的时候提示用户耐心等待，过一段时间后再刷新，或者下回再来看看，希望它已经自己安装好了。<br />
</p>
  <img src ="http://www.blogjava.net/emu/aggbug/251099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2009-01-13 11:46 <a href="http://www.blogjava.net/emu/archive/2009/01/13/251099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打开QQ空间速度飞快的方法</title><link>http://www.blogjava.net/emu/archive/2009/01/11/250880.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Sun, 11 Jan 2009 13:07:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2009/01/11/250880.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/250880.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2009/01/11/250880.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/250880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/250880.html</trackback:ping><description><![CDATA[<a href="http://qzone.qq.com/blog/286013388-1231422960">打开QQ空间速度飞快的方法<br />
</a><br />
<div style="font-size: 16px" id="blogDetailDiv">假如你是中国电信adsl上网的用户，在windows平台下试用IE浏览器访问QQ空间，那么<br />
首先呢，就是访问<wbr><a target="_blank" href="http://gears.google.com/">http://gears.google.com/</a><wbr> 先把google gears装上(最新是0.5版)。有一些同学访问不了gears主页或者由于某种原因安装不上google上的最新版gears，那么可以试试到<br />
<a href="http://down1.tech.sina.com.cn/download/down_contents/1194710400/37265.shtml">http://down1.tech.sina.com.cn/download/down_contents/1194710400/37265.shtml</a><br />
上下载稍微旧一点的版本（0.4版）<br />
网上还有更旧的版本，但是emu就没有实验过了。<br />
然后呢，你就可以访问这个地址了：<wbr><a target="_blank" href="http://imgcache.qq.com/qzone/test/gears/gearsMng.html">http://imgcache.qq.com/qzone/test/gears/gearsMng.html</a><wbr><br />
对于网通宽带的朋友，就要访问这个：<wbr><a target="_blank" href="http://cnc.imgcache.qq.com/qzone/test/gears/gearsMng.html">http://cnc.imgcache.qq.com/qzone/test/gears/gearsMng.html</a><wbr><br />
而对于教育网的朋友，则要访问这个：<wbr><a target="_blank" href="http://edu.imgcache.qq.com/qzone/test/gears/gearsMng.html">http://edu.imgcache.qq.com/qzone/test/gears/gearsMng.html</a><wbr><br />
点击&#8220;启用加速&#8221;，会有个gears提示，确认以后，等全部进度条走成绿色就好了，以后访问QQ空间的时候就会自动的变得飞快。<br />
<br />
有几点小技巧：<br />
* google gears不是很稳定，有的时候进度条走着走着就卡住不走了，这个时候可以多点几下&#8220;启用加速&#8221;就好了。如果还是不行，可能是网络原因，也没有关系，不管它就可以了，google gears会在网络好的时候自己把没下载完的文件给补上的。<br />
* 如果不大确定你的上网环境（联通？有线宽屏？铁通？），或者笔记本经常抱来抱去上QQ空间，那么不妨把电信、网通和教育网三个页面都访问一遍，分别启用加速，这样不管在什么环境下都可以确定获得最好的效果。<br />
* 如果你用的是FireFox浏览器，也可以依照上面的操作。<br />
* 如果你用的是google的chrome浏览器，并且是1.0正式版以上的版本，那么它已经自带了一个比较稳定版本的gears，跳过安装gears这一步。但是chrome下面gears还是有时不十分稳定，虽然emu已经尽力做了兼容，在第一次使用的时候还是可能有点问题。<br />
* 如果用的不是windows系统，那么gears还有MacOS下的版本，支持Safari(<a href="http://gears.google.com/?platform=mac-safari">http://gears.google.com/?platform=mac-safari</a>)和Firefox(<a href="http://gears.google.com/?platform=mac-firefox">http://gears.google.com/?platform=mac-firefox</a>)和linux下的版本(<a href="http://gears.google.com/?platform=linux">http://gears.google.com/?platform=linux</a> 支持Firefox)，恭喜恭喜。不过到底用起来怎么样，emu也没试过。<br />
* 如果你用的居然是opera，就认命了吧。</div>
<img style="position: relative; display: none" id="paperPicArea1" alt="" src="http://qzone.qq.com/ac/b.gif" width="1" height="1" /> 
 <img src ="http://www.blogjava.net/emu/aggbug/250880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2009-01-11 21:07 <a href="http://www.blogjava.net/emu/archive/2009/01/11/250880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分域名优化的时候要考虑备选IP的问题</title><link>http://www.blogjava.net/emu/archive/2008/05/23/202357.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Fri, 23 May 2008 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/emu/archive/2008/05/23/202357.html</guid><wfw:comment>http://www.blogjava.net/emu/comments/202357.html</wfw:comment><comments>http://www.blogjava.net/emu/archive/2008/05/23/202357.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/emu/comments/commentRss/202357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/emu/services/trackbacks/202357.html</trackback:ping><description><![CDATA[我们在需要下载很多内容的时候，很容易想到做分域名的并发下载，给原来的服务器多分几个域名，因为分不同的域名可能可以在浏览器中分到更多的下载进程，提高下载速度。<br />
但是在做网络应用的时候，我们的一个域名下面有的时候会有多个ip多台服务器，分布在不同的机房，这个时候浏览器会在可选的ip里面随机的选择一个ip。用nslookup可以看到可选的ip，用ping可以看到当前正在实用的ip。<br />
在多个ip的情况下，对具体的一个用户，往往是连接到某些ip特别快，而连接到某些ip就不怎么块。比如我现在有一个域名（和它的几个分域名），在深圳访问的时候有2个ip可以分，其中一个是深圳本地的服务器，一个是外地的服务器。这个时候如果页面打开需要用到的关键资源依赖于这个域名，那么分域名有可能对速度不是提高而是有反作用。<br />
因为这种情况下，慢的资源成为了瓶颈，变成是速度的决定因素。我本来有一半的机会是快的，一半的机会是慢的，如果现在分两个域名去下载关键资源，变成有1/4的机会是两个域名都分到深圳的服务器，可以有提高，而3/4的机会是有一个以上的域名分到外地的服务器，反而变慢了，这样提高的是少部分人的感受，而多数人的感受没有提升或者变的更差。如果简单的按照yahoo的优化建议分散到4个域名上，那么这个比例就变成1：15，更差了。<br />
因此分域名下载不能简单的绝对化的看待，要看实际应用场景做决定。
<img src ="http://www.blogjava.net/emu/aggbug/202357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/emu/" target="_blank">emu</a> 2008-05-23 11:36 <a href="http://www.blogjava.net/emu/archive/2008/05/23/202357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>