<?xml version="1.0" encoding="utf-8" ?>
<!-- generator="FEEDCREATOR_VERSION" -->
<rss version="2.0" xmlns:sns="http://blog.sina.com.cn/sns">
    <channel>
        <title>淡淡花香入梦来</title>
        <description></description>
        <link>http://blog.sina.com.cn/bencalie</link>
        <lastBuildDate>Mon, 04 Jan 2010 11:01:35 GMT+8</lastBuildDate>
        <generator>FEEDCREATOR_VERSION</generator>
        <language>zh-cn</language>
        <copyright>Copyright 1996 - 2009 SINA Inc. All Rights Reserved.</copyright>
        <pubDate>Mon, 04 Jan 2010 03:01:35 GMT+8</pubDate>
        <item>
            <title>让 Aptana 编辑器支持换行</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100eo5f.html</link>
            <description><![CDATA[<p STYLE="TexT-inDenT: 24px">一直以来都不习惯 Aptana
的文本编辑器不支持换行，很多时候，不得不加个回车，手动换行，免得每次拉横向滚动条来修改代码，现在好了，简单设置一下即可。（如果没有该选项，请检查你的
Aptana 版本是否太低，我的是 Aptana Professional Studio 1.5.1）</P>
<p STYLE="TexT-inDenT: 24px">请打开主菜单 Window -&gt;
Preferences，打开设置对话框</P>
<div STYLE="TexT-ALiGn: center"><img SRC="http://static8.photo.sina.com.cn/orignal/53d96fe3t718d0fe9faf7&amp;690" /></DIV>
<br />
<div STYLE="TexT-ALiGn: center"><img SRC="http://static15.photo.sina.com.cn/orignal/53d96fe3t6f82a03664be&amp;690" /></DIV>]]></description>
            <author>淡淡花香入梦来</author>
            <category>Aptana_初体验</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100eo5f.html#comment</comments>
            <pubDate>Sat, 25 Jul 2009 07:23:26 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100eo5f.html</guid>
        </item>
        <item>
            <title>Aptana脚本：JS 文件中非键盘输入字符和 Unicode 互转</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100dzb5.html</link>
            <description><![CDATA[<p>目的：</P>
<p>为了减少由于 JS 代码中中文引起的乱码现象，自动将键盘不可输入字符转换为 unicode 形式，或者转回来以便修改。</P>
<p>使用方法：</P>
<b>快捷键 —— Ctrl+Alt+C</B>
<ul>
<li>在你的 Aptana 项目下建立一个 scripts 目录或者 monkey 目录。</LI>
<li>把附件中的文件放到该目录下。</LI>
<li>你就可以在主菜单 Scripts -&gt; Editors 下看到一个 Chinese to
Unicode，或者在 Scripts 面板看到该脚本，双击或者右键选择 Execute 来执行它既可。</LI>
</UL>
<p>
----------------------------------------------------------------------------------</P>
<textarea STYLE="WiDTH: 780px; HeiGHT: 400px">

function main() {
        var editor = editors.activeEditor;
        
        var source = editor.source;
        
        var replaceRegexp;
        
        // 如果文件中有非键盘输入字符，就替换成 unicode 形式
        if(/[^a-z0-9\s`~!@#$%^&amp;*()\-+={}\[\]\|\\:;'",&lt;\.&gt;\/?]/i.test(source)){
                replaceRegexp = /([^a-z0-9\s`~!@#$%^&amp;*()\-+={}\[\]\|\\:;'",&lt;\.&gt;\/?])/ig;
                source = source.replace(replaceRegexp, function(a,b){
                        return "\\u" + ("0000" + b.charCodeAt(0).toString(16)).replace(/\w+(\w{4})/, "$1");
                });             
        }else{
                replaceRegexp = /(\\u[a-z0-9]{4})/ig;
                source = source.replace(replaceRegexp, function(a,b){
                        return String.fromCharCode(parseInt(b.substr(2), 16));
                });
        }
        
        editor.applyEdit(0, editor.sourceLength, source);
}
</TEXTAREA>]]></description>
            <author>淡淡花香入梦来</author>
            <category>Aptana_初体验</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100dzb5.html#comment</comments>
            <pubDate>Thu, 11 Jun 2009 02:03:14 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100dzb5.html</guid>
        </item>
        <item>
            <title>Fiddler2 中文手册“无法显示网页”问题的解决办法</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100dt4v.html</link>
            <description><![CDATA[<p>端午节期间，我接到网友的 Email，说 Fiddler2 中文手册页面打开后，出现无法显示网页的错误，如下图：</P>
<p><img SRC="http://static9.photo.sina.com.cn/orignal/53d96fe3t6b2be74c5ce8&amp;690" /></P>
<div STYLE="FonT-WeiGHT: bold; MArGin: 20px 0px; CoLor: #0000ff">
<p>解决办法如下：</P>
<p>&nbsp;</P>
<p>在资源管理器中右键点击该 chm
文件，选择属性菜单，弹出的属性对话框常规选项卡中，靠下部有个“解除锁定”按钮，单击该按钮解除锁定，再次打开 chm 文件就好了</P>
</DIV>]]></description>
            <author>淡淡花香入梦来</author>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100dt4v.html#comment</comments>
            <pubDate>Sun, 31 May 2009 02:13:23 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100dt4v.html</guid>
        </item>
        <item>
            <title>[原创] Fiddler2 中文手册</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100dku6.html</link>
            <description><![CDATA[<p>最近一阵研究 Fiddler2
的使用来着，一开始看起来有点找不着北，索性就根据官网资料和自己的摸索，整理出了一个帮助文档，主要以界面的详细介绍为主，暂时没有写大篇的使用教程，先将就用吧。</P>
<p STYLE="MArGin: 20px 0px">下载地址：<a HREF="http://benc.net84.net/download/Fiddler2.chm" TARGET="_blank">Fiddler2 中文手册</A> (请右键另存)</P>
<p><img SRC="http://static10.photo.sina.com.cn/orignal/53d96fe3t69c8897d8ed9&amp;690" /></P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>我的JS脚本心得</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100dku6.html#comment</comments>
            <pubDate>Wed, 13 May 2009 10:16:39 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100dku6.html</guid>
        </item>
        <item>
            <title>雷人的 IE6 JS 报错</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100dkd9.html</link>
            <description><![CDATA[<p>不可思议，错误居然出在第<span STYLE="FonT-WeiGHT: 600; MArGin-BoTToM: 30px; CoLor: #ff0000">一亿</SPAN>多行，而且每次刷新都不一样</P>
<p><img SRC="http://static6.photo.sina.com.cn/orignal/53d96fe3t70f828815515&amp;690" /></P>]]></description>
            <author>淡淡花香入梦来</author>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100dkd9.html#comment</comments>
            <pubDate>Tue, 12 May 2009 06:54:59 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100dkd9.html</guid>
        </item>
        <item>
            <title>记录几个Javascript 正则，以备以后查询</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100djrr.html</link>
            <description><![CDATA[<p>1、格式化字符串为千分号表示，如：1000000.10，格式化为 1,000,000.10</P>
<p>var re = /(\d{1,3})(?=(\d{3})+(?:$|\.))/g;</P>
<p>var result = "1000000.10".replace(re, "$1,");&nbsp;
<font COLOR="#006600">// 结果 1,000,000.10</FONT></P>
<p>&nbsp;</P>
<p>2、匹配字符串中特殊的一段，这里匹配 "ssss#{{btnOK}}sdf#{ok}dfsdf" 花括号中的字符</P>
<p>var re = /[^\{\}]+(?=\})/g;</P>
<p>var result = "ssss#{{btnOK}}sdf#{ok}dfsdf".match(re);
<font COLOR="#006600">// 结果 ["btnOK", "ok"]</FONT></P>
<p>&nbsp;</P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>我的JS脚本心得</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100djrr.html#comment</comments>
            <pubDate>Mon, 11 May 2009 11:59:40 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100djrr.html</guid>
        </item>
        <item>
            <title>页面性能优化——为什么 Google 如此之快？</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100d5ec.html</link>
            <description><![CDATA[<p>毫无疑问，目前 Google 作为最成功的搜索引擎，返回结果的速度也是最佳的。下面是 Google 和两个最大竞争对手
Yahoo 和 Live.com 通过 HttpWatch 抓包得到的时间表：</P>
<p>Google.com 返回结果页面耗时 0.155 秒：</P>
<p><img ALT="Google 结果页的时间表" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a4e265ac5" /></P>
<p>Live.com 返回结果页面耗时 0.619 秒：</P>
<p><img ALT="Live.com 结果页的时间表" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a4ec6b518" /></P>
<p>Yahoo 返回结果页面耗时 1.131 秒：</P>
<p><img ALT="Yahoo 结果页的时间表" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a4f5f07a8" /></P>
<p><em>这些抓图，都是在浏览器无缓存的情况下，分别访问每个搜索引擎首页，键入一个相同的搜索条目：</EM><a TITLE="下载 HttpWatch Basic Edition" HREF="http://www.httpwatch.com/download/" TARGET="_blank"><em>Basic
Edition of HttpWatch</EM></A></P>
<p>当单击“搜索”按钮后，关键字搜索结果的返回时间，Google 比 Live.com 快了四倍，比 Yahoo
快了七倍。他们是怎么做到的呢？</P>
<p>很显然，用于查找此关键字的结果所花费的时间是至关重要的，不可否认，Google 的分布式超级电脑是核心所在，<a TITLE="Google 动力之密溯源" HREF="http://blog.topix.com/archives/000016.html" TARGET="_blank">据说</A>他们超过10万台服务器在提供服务。与此同时，Google
也对他们的结果页做了大量的优化，对站点性能有最重要影响的是如下两方面：</P>
<ul>
<li>减少 HTTP 请求数</LI>
<li>让数据下载量最小(也就是节省了下载时间)。</LI>
</UL>
<p>Google 的结果页仅仅需要一次请求，而 Live.com 和 Yahoo
分别是四次、八次。他们确保搜索结果页不依赖任何外部资源。所有的样式信息和 Javascript 代码都通过
<code>&lt;style&gt;</CODE> 和
<code>&lt;script&gt;</CODE> 标签集成到到页面内。</P>
<p>你可能奇怪搜索结果页面的 Google Logo 和其他图片是怎么渲染的，因为 IE 浏览器并不支持<a HREF="http://www.jimbojw.com/wiki/index.php?title=Data_URIs_and_Inline_Images">内嵌图片数据(in-lined
image data)</A>。当然，这中间有一点点技巧。当用户访问 Google 首页的时候，图片 nav_logo3.png
已经被后台的 Javascript 脚本预先加载(你可以在 HttpWatch 中看到)：</P>
<p><img ALT="预加载 nav_logo3.png" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a4ff1a9ad" /></P>
<p>这个图片在首页上并没有显示，但会被强加到浏览器缓存中。当搜索结果页被浏览器渲染的时候，就无需从 google.com
读取该图片，因为它已经有了一个本地副本。它甚至根本不会在 HttpWatch 上显示为一个 (Cache) 结果，因为 IE
会直接在内存图片缓存中直接加载它。</P>
<p>正如你从抓图中看到的一样，nav_logo3.png 不仅包含了 Google logo。它还包含了一些箭头和 Google
Checkout logo(结帐)。因为结果页使用了一种称为 <a TITLE="CSS Sprites" HREF="http://www.google.com/search?hl=en&amp;q=CSS+sprites&amp;meta=">
CSS Sprites</A> 的技术。结果页中使用的所有图片都是通过 CSS
<code>background-position</CODE> 属性精确定位到这个“集成图片”上的具体位置。该技术的使用，使得
Google 结果页所需的图片仅仅需要一个请求就完成了。</P>
<p>Google 搜索结果页和竞争对手相比，另一个高明之处在于，是下载数据量的大小。你可以从下面的 Http
抓包统计结果中，查看高亮部分的值：</P>
<p><img ALT="Google 结果页汇总" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a509b5f4e" /></P>
<p><img ALT="Live.com 结果页汇总" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a51223219" /></P>
<p><img ALT="Yahoo 结果页汇总" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t676a51d5aced" /></P>
<p>Google 搜索结果页仅仅需要下载 6 KB 数据，Live.com 是 16 KB，Yahoo 是 57
KB。这三个搜索引擎都使用了 HTTP 压缩，但是 Google 结果页数据量更小，那是因为：</P>
<ol TYPE="1">
<li>他们的页面更简单，只需很少的 HTML。</LI>
<li>他们避免额外请求脚本和 CSS。每个请求都需要 HTTP 响应并增加了下载的数据量。另外，HTTP
压缩对于单一的大数据量请求和多个小数据量请求来说，前者效率更佳。</LI>
<li>HTML 是最小尺寸，牺牲可读性。包括去掉无用的空格、去掉注释和使用较短的 name 和 id 的变量名。</LI>
</OL>
<p>Google 不仅采用了这些技术来提升搜索结果页的性能，也得益于减少了对 Google web 服务器的请求。</P>
<p>&nbsp;</P>
<p>原文：<a HREF="http://blog.httpwatch.com/2007/11/05/why-is-google-so-fast/" TARGET="_blank">Why is Google so Fast?</A></P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>翻译和整理文章</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100d5ec.html#comment</comments>
            <pubDate>Mon, 13 Apr 2009 06:58:03 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100d5ec.html</guid>
        </item>
        <item>
            <title>在 IE 7 中使用 Ctrl+F5</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100d4u5.html</link>
            <description><![CDATA[<p>在 IE 浏览器中，快捷键 Ctrl+F5 是一种强制重载页面和页面内容（如图片、CSS、Javascript
等）的快捷途径。它等同于没有任何浏览器缓存的时候访问一个页面。</P>
<p>如果你在 IE 6 中使用 Ctrl+F5 刷新页面，并用 HttpWatch
抓包，你可以看到每个请求都返回一个<code>HTTP 200 OK</CODE>响应：</P>
<p><img ALT="在 IE 6 中使用 Ctrl+F5" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t67498aa55f8f" /></P>
<p>这表示每个 HTTP 请求返回时候都响应了它的全部内容。</P>
<p>然而，在 IE 7 中，你按 Ctrl+F5 后你也许会看到一个不同的响应：</P>
<p><img ALT="在 IE 7 中使用 Ctrl+F5" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t67498c1cfcce" /></P>
<p>结果是，只有 HTML 页面返回的响应是<code>200 OK</CODE>。其他类型的请求都返回的是<code>304
Not Modified</CODE>(未变更) 。仔细检查 HttpWatch
日志后，可以看到每个请求发出的时候都会发送一个<code>If-Modified</CODE>(是否变更)报头。这跟你按 F5
或者点击刷新按钮的预期结果是一样的。</P>
<p>事实上，Ctrl+F5 在 IE 7 中仅仅当<a TITLE="键盘焦点定义" HREF="http://www.usabilityfirst.com/glossary/term_621.txl" TARGET="_blank">键盘焦点</A>在页面内的时候才生效。如果你的焦点移动到其他位置，比如<a TITLE="地址栏定义" HREF="http://en.wikipedia.org/wiki/Location_bar" TARGET="_blank">地址栏</A>，它将忽略 Ctrl 按键，就跟直接按 F5 起到的效果相同。</P>
<p>因此，如果你真的想在 IE 7 中强制刷新页面，请一定要先在该页面内点击或者点击该 tab 才能生效。</P>
<p>&nbsp;</P>
<p>原文：<a HREF="http://blog.httpwatch.com/2007/10/19/using-ctrlf5-in-ie-7/" TARGET="_blank">Using Ctrl+F5 in IE 7</A></P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>翻译和整理文章</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100d4u5.html#comment</comments>
            <pubDate>Sat, 11 Apr 2009 16:00:16 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100d4u5.html</guid>
        </item>
        <item>
            <title>IE 8 不得不说的七件事</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100d4jv.html</link>
            <description><![CDATA[<p>在使用 IE 8 两周多以后，我们在此列出 IE 8 发布后，在 Web 开发、调试和执行调试中有重大影响的功能点。</P>
<h3>#1 : IE 8 在同一域名下能同时开启更多连接</H3>
<p>正如我们此前在《<a TITLE="阻塞时间和IE 8" HREF="http://blog.httpwatch.com/2008/03/31/blocked-time-and-ie-8/">阻塞时间(Blocked
time) 和 IE 8</A>》一文中提到的一样，IE 8 中对同一域名的默认并发连接数已经增加了。在早期的 IE
版本中，最多允许两个连接从同一域名(例如：www.microsoft.com)同时请求内容。下面是一个 IE 7 中的
HttpWatch 抓图：</P>
<p><img TITLE="IE 7 允许同一域名两个并发请求" STYLE="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" HEIGHT="503" ALT="IE 7 允许同一域名两个并发请求" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t673faee1c9f1" WIDTH="517" /></P>
<p>两个并发活动连接的限制经常会造成大量请求排队，直到其中一个连接完成才能继续下一个。在 HttpWatch
中，称之为“阻塞时间”(Blocked time)，在时间图中显示为一个灰色块。</P>
<p>IE 8 活动连接数增加到 6 个(和 Firefox 3
相同)，允许更多的并发请求，很大程度上减少了现在多数网页上出现的阻塞时间：</P>
<p><img TITLE="IE 8 允许同一域名六个并发请求" STYLE="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" HEIGHT="579" ALT="IE 8 允许同一域名六个并发请求" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t673fb0036f1e" WIDTH="511" /></P>
<p>如果你很关注你站点的性能，你可以在 IE 7 下检验，无论如何，与 IE 8 下肯定有很明显的区别。</P>
<h3>#2 : IE 8 使用了新的进程机制</H3>
<p>IE 8 有一个新特性，叫 <a TITLE="松散耦合 IE" HREF="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx">
松散耦合 IE (LCIE)</A>，使用不同的 iexplore.exe 进程实例来提供增强的独立性和可靠性。IE 的帧窗口和
tabs 运行在不同进程中，这样一个 tab 崩溃以后你也不用结束整个浏览器会话：</P>
<p><img TITLE="IE 8 进程机制" STYLE="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" HEIGHT="490" ALT="IE 8 进程机制" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t673fb1927a09" WIDTH="606" /></P>
<p>如果发生错误，IE 8 会尝试重启或重开一个独立的
tab。弹出窗口也会使用类似的机制处理，如果可能，将会放到独立的进程中。</P>
<p>这种机制的优点是，允许保护模式和非保护模式站点的 tab 能够在同一顶级窗口中载入。IE 7
中，如果你打算在不同的保护级别上打开 tabs 的时候，才会创建一个独立的帧窗口。</P>
<p>最初，每个新的 tab 和弹出窗口都会获得一个新进程来打开，但随着 tabs
的数量增加，进程数会达到一个峰值。一旦达到了峰值，新的 tab 就会和其他的 tabs 共享现有的进程。默认情况下，进程数的上限是由
Windows 系统的可用物理内存决定的。</P>
<p>在旧版本的 IE 中，单击开始菜单上的蓝色“e”图标将会在一个独立 iexplore.exe 进程实例中创建一个新 IE
帧窗口。IE 8 中，这种行为变成要尽可能减少分配给 IE 的进程数。现在使用的技术，称之为“帧合并”(Frame
Merging)，如果已经有一个进程，它将使用现有的 IE 帧进程来创建 IE 帧窗口。</P>
<p>如果你希望使用不同的 IE frame 进程，你可以在 IE 快捷方式中增加一个参数 -nomerge 来实现：</P>
<p><code>iexplore.exe -nomerge</CODE></P>
<h3>#3 : 所有的 IE 8 Tabs、窗口和弹出窗口属于同一浏览器会话</H3>
<p>在旧版本的 IE 中，浏览器会话级的 cookies 能够在同一浏览器进程中保持。这意味着每次你单击 IE 图标开启一个新的
IE 进程的时候也就开始了一个新的浏览器会话，你可以同时登录到不同的账户(例如多个Gmail账户)。</P>
<p>IE 8 并不会给每个进程创建一个新会话，因为不同进程中的多个 tabs 或弹出窗口可能需要共享同一个会话级的
cookies。故而，浏览器会话现在能在进程中保持，包括了主 frame 窗口。</P>
<p>IE 8 中默认使用“帧合并”是为了防止创建多个帧进程，因此所有的窗口和 tabs 都属于同一会话。这个和《<a TITLE="Firefox 进程机制" HREF="http://blog.httpwatch.com/2009/02/10/the-firefox-process-model/">Firefox
使用单一的默认配置</A>》中描述的行为相同。</P>
<p>但是如果你想在同一个站点同时登录两个或更多帐号怎么办呢？</P>
<p>为了创建一个新会话，你必须确保创建一个新的 IE 8 帧进程。有两种办法可以做到：</P>
<ol>
<li>使用上面所述的 -nomerge 参数</LI>
<li>使用文件-&gt;新会话。这会创建一个新的帧窗口进程和浏览器会话。</LI>
</OL>
<h3>#4 : IE 8 进程机制可配置</H3>
<p>IE 开发团队在<a TITLE="TabProcGrowth Registry Value" HREF="http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx">文章</A>中提到一个简单的注册表键值用于控制这种新进程机制。你需要在下面位置创建一个
DWORD 类型的键叫做 TabProcGrowth：</P>
<p><code>HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Main</CODE></P>
<p>你可以控制在 IE 8 中有多少个浏览器进程：</P>
<p><img TITLE="TabProcGrowth 注册表键" STYLE="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" HEIGHT="287" ALT="TabProcGrowth 注册表键" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t673fb5482388" WIDTH="608" /></P>
<p>最有用的三个键值设置如下：</P>
<ol>
<li><strong>TabProcGrowth =</STRONG> - 默认设置，允许 IE 8
控制使用多少进程都基于物理内存总量。</LI>
<li><strong>TabProcGrowth = 0</STRONG> - 值为 0 表示每个浏览器会话中的所有
tabs、帧、弹出窗口都是用同一个进程。这让 IE 8 和 Windows XP 上的 IE 7 没有区别。没有帧合并，单击 IE
图标会在独立的浏览器会话中创建新 iexplore.ext 实例。设置了它以后 Vista 上的保护模式将不可用，因为如果 IE 帧和
tabs 在不同的进程中它们就只能在不同的完整级别(integrity levels)上被操作Protected mode on
Vista is not available with this setting because the IE frame and
tabs can only operate at different integrity levels if they are in
separate processes. 如果你正在调试一个 IE 插件，或你正在进行基于 IE 7
进程机制的自动化测试，这个设置会很有用。</LI>
<li><strong>TabProcGrowth = 1</STRONG> - 值为 1 表示在一个浏览器会话中，所有 tabs
和弹出窗口会使用一个进程，IE 8 帧窗口使用另一个进程。该设置下帧合并被启用，并且 Vista 下也支持保护模式。如果你想让
tabs 和弹出窗口使用一个进程，但同时使用保护模式，你就可以把 TabProcGrowth 设置成 1。</LI>
</OL>
<p>指定大于 1 的值用于设定 tabs 进程的数量上限。</P>
<h3>#5 : IE 8 中的兼容性工作区</H3>
<p>IE 8 中新的、改进的标准模式执行意味着，原来在 IE 7 中能正确显示的页面，可能在 IE 8
中没法正确显示。理想的是，每个站点都更新它们的 HTML 来确保显示正常，但工作区提供了一个 IE 7
仿真选项。可以使用下列方式激活：</P>
<ol>
<li>微软有一个 <a TITLE="IE 8 Compatibility List" HREF="http://www.microsoft.com/downloads/details.aspx?familyid=B885E621-91B7-432D-8175-A745B87D2588&amp;displaylang=en">
列表</A> 来记录用户反馈的在 IE 8 下显示不正确的站点。IE 7 仿真模式将对列表中的站点自动生效，包括一些常见站点，例如
amazon.com、ebay.com、google.com，即使是微软公司自己的 microsoft.com！</LI>
<li>一个网站开发者可以通过增加 META 到 HTML中来指定使用这种兼容模式：
<div><code>&lt;META http-equiv="X-UA-Compatible"
content="IE=EmulateIE7"&gt;</CODE></DIV>
<p>或者使用一个响应报头：</P>
<div><code>X-UA-Compatible: IE=EmulateIE7</CODE></DIV>
<p>在微软主页上就使用了 META 标签，在 MSDN 网站使用的是响应报头，可以在 HttpWatch 中看到：</P>
<p><img TITLE="emulateie7header1" STYLE="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" HEIGHT="292" ALT="emulateie7header1" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t70b991facfd3" WIDTH="584" /></P>
</LI>
<li>如果用户遇到问题，可以在 IE 8 上点击兼容模式按钮：
<div><img TITLE="emulateie7button" STYLE="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" HEIGHT="150" ALT="emulateie7button" SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t673fb295b3a4" WIDTH="446" /></DIV>
<p>如果该站点已经是在 IE 7 仿真模式下，这个按钮不可见。</P>
</LI>
</OL>
<p>是否广泛使用 IE 7 仿真模式，取决于一个大型站点修改 HTML 适应 IE 8 标准模式且仍兼容 IE7
所花费的工作量。</P>
<h3>#6 : IE 8 集成的新开发工具</H3>
<p>IE 8 集成了一些新的优秀开发工具。你无需单独安装这些 IE 7 中使用的 Web 开发工具栏。这些工具包括：</P>
<ul>
<li>‘查看源文件’现在会打开一个支持 HTML 语法高亮和行号的窗口，而不是旧版的记事本软件。</LI>
<li>一个像 Firebug 一样的 DOM 查看器，能够显示任意 HTML 元素应用的 CSS 样式。</LI>
<li>一个 Javascript 调试器和控制台。</LI>
</UL>
<h3>#7: 怎样在 IE 8 中使用 HttpWatch</H3>
<p>在 IE 8 中你能看到唯一真正的区别来自于新进程机制。</P>
<p>HttpWatch 是根据进程来记录通信量的。因此在 IE 8 中会给每个 Tab
和弹出窗口进程记录不同的日志。总之，你不会太希望每个 tab 和窗口分别显示各自的日志。如果你想跨多 tabs
或弹出窗口记录日志，有两种途径：</P>
<ol>
<li>改变 IE 8 的进程机制以便一个进程用于多个 tabs 和窗口(例如 TabProcGrowth 为 0 或 1 )。这样
HttpWatch 就能将所有通信都记入同一个日志文件。</LI>
<li>如果你不想改变进程机制，你可以给每个 tab 和弹出窗口分别查看和记录日志。如果窗口没有工具栏你可以使用快捷键
Shift+F2 来打开 HttpWatch。</LI>
</OL>
<p STYLE="MARGIN: 10pt 0cm 0pt">你将会发现 HttpWatch 快捷键在 IE 8
的地址栏和搜索区域都无效。我们在将来的更新中将解决这个问题，在此期间，你可以在页面内获得输入焦点后，使用快捷键。</P>
<p>&nbsp;</P>
<p>原文：<a HREF="http://blog.httpwatch.com/2009/04/07/seven-things-you-should-known-about-ie-8/" TARGET="_blank">Seven Things You Should Known About IE 8</A></P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>翻译和整理文章</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100d4jv.html#comment</comments>
            <pubDate>Sat, 11 Apr 2009 04:05:54 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100d4jv.html</guid>
        </item>
        <item>
            <title>视频：手把手教你在博客插入大图片</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100d0fs.html</link>
            <description><![CDATA[<p>
前一阵子发了一篇贴图的教程，但是还有很多人反映看不明白，好吧，索性录制了一段视频，大家看我的操作一步一步来，这样子应该没问题了吧？</P>
<p>请点击下面的地址访问相关页面</P>
<p>视频播放页地址：</P>
<p><a HREF="http://benc.net84.net/download/blog.html" TARGET="_blank">http://benc.net84.net/download/blog.html</A></P>
<p>Flash文件下载地址：</P>
<p><a HREF="http://benc.net84.net/download/blog.swf" TARGET="_blank">http://benc.net84.net/download/blog.swf</A></P>
<p>源代码处理工具地址：</P>
<p><a HREF="http://benc.net84.net/download/convert.html" TARGET="_blank">http://benc.net84.net/download/convert.html</A></P>]]></description>
            <author>淡淡花香入梦来</author>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100d0fs.html#comment</comments>
            <pubDate>Thu, 02 Apr 2009 02:15:30 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100d0fs.html</guid>
        </item>
        <item>
            <title>推荐：实时录制视频软件ALLCapture</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100cx3n.html</link>
            <description><![CDATA[<p>今天在准备一个经验分享会的时候，为了直观的演示操作步骤，决定通过屏幕录像工具制作一个实时动画，达到最生动的演示效果，发现了软件
AllCapture，发现它真的很棒，不敢藏私，拿出来与大家分享。</P>
<p STYLE="TEXT-ALIGN: center"><img SRC="http://bj.static.photo.sina.com.cn/orignal/53d96fe3t65de17fdae5c" /></P>
<p STYLE="TEXT-INDENT: 24px">它可以录制屏幕上指定大小的区域、全屏录制、多显示器录制也支持。企业版带的
Powerpoint 插件，还可以自动录制 PPT 播放。</P>
<p STYLE="TEXT-ALIGN: center"><img SRC="http://static1.photo.sina.com.cn/orignal/53d96fe3t65dd780334d0" /></P>
<p>视频录制过程分为三步：</P>
<p><b>第一步：录制</B></P>
<p STYLE="TEXT-INDENT: 24px">使用
ALLCapture&trade;，你可以非常快速和容易地录制您屏幕上的每个动作。点击了录制按钮后，ALLCapture
将持续记录屏幕直到您通过工具栏结束录制过程。</P>
<p><b>第二步：编辑</B></P>
<p STYLE="TEXT-INDENT: 24px">当您完成录制后，您可以编辑记录下的内容。AllCapture
提供了强大的编辑功能，可以增加批注气泡或者注释来解释不同的步骤；也可以插入特效或者图片到项目中；还可以增加音频描述。编辑界面非常类似
Flash 软件的时间线，能够实时看到编辑的效果。</P>
<p><b>第三步：发布</B></P>
<p STYLE="TEXT-INDENT: 24px">您可以将创建的项目通过 ALLCapture 发布为：Flash 影片
(*.swf)、Flash 应用程序 (*.exe)、Windows 媒体播放器 ASF 格式、MPEG
视频，从而便于发布到互联网或者用于创建 DVD。</P>
<p STYLE="TEXT-INDENT: 24px">发布 Demo 非常容易，不需要有任何编程基础。</P>
<p STYLE="TEXT-INDENT: 24px">
这几种格式几乎都独立于操作系统，或者仅仅需要标准的插件支持，绝大多数浏览器都已经集成了 Adobe 的 Flash 插件。</P>
<p STYLE="TEXT-INDENT: 24px">生成的 swf 文件，每分钟仅仅 300-550
KB，但基本能保持很高的清晰度。能够很快捷的在网上下载。</P>
<p STYLE="TEXT-ALIGN: center"><img SRC="http://static11.photo.sina.com.cn/orignal/53d96fe3t65dd7a7f4d2a" /></P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>翻译和整理文章</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100cx3n.html#comment</comments>
            <pubDate>Tue, 24 Mar 2009 13:30:47 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100cx3n.html</guid>
        </item>
        <item>
            <title>如何使 DIV 浮于 Flash 之上</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100cuzb.html</link>
            <description><![CDATA[<div STYLE="PADDING-RIGHT: 20px; BORDER-TOP: #666 1px dashed; PADDING-LEFT: 20px; FONT-SIZE: 12px; PADDING-BOTTOM: 20px; MARGIN: 20px; PADDING-TOP: 20px; BORDER-BOTTOM: #666 1px dashed">
&lt;object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
width="550" height="400"&gt;<br />
&lt;param name="movie"
value="http://imgfree.21cn.com/free/flash/17.swf"
/&gt;<br />
&lt;param name="quality" value="high"
/&gt;<br />
&lt;param name="wmode" value="<span STYLE="COLOR: #f00">opaque</SPAN>" /&gt;<br />
&lt;embed
src="http://imgfree.21cn.com/free/flash/17.swf" wmode="opaque"
quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="550"
height="400"&gt;&lt;/embed&gt;<br />

&lt;/object&gt;</DIV>]]></description>
            <author>淡淡花香入梦来</author>
            <category>我的JS脚本心得</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100cuzb.html#comment</comments>
            <pubDate>Thu, 19 Mar 2009 08:13:02 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100cuzb.html</guid>
        </item>
        <item>
            <title>Aptanta Studio 1.2.4 中上传/下载文件夹的方法</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100cu8u.html</link>
            <description><![CDATA[<p>Aptana Studio Professional 升级到 1.2.4
后，在项目(Projects)视图中，右键点击文件夹，丢失了『同步-&gt;上传』/『同步/下载』的菜单。在旧版中，是可以通过该菜单，将整个项目的文件夹一次性同步到服务器的。</P>
<p>
目前已经向他们官网论坛反馈了这个问题，官方承诺下次更新的时候修复这个BUG。当前的只有使用项目(Projects)视图工具栏中的按钮来解决，如下图：</P>
<p STYLE="TEXT-ALIGN: center"><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static14.photo.sina.com.cn/orignal/53d96fe3t654dbaa3598d" TARGET="_blank"><img SRC="http://static14.photo.sina.com.cn/bmiddle/53d96fe3t654dbaa3598d" /></A></P>
<p>方法：点击要上传的文件夹，并选择上传或者下载按钮。</P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>Aptana_初体验</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100cu8u.html#comment</comments>
            <pubDate>Tue, 17 Mar 2009 10:01:09 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100cu8u.html</guid>
        </item>
        <item>
            <title>Flash 方法不能调用的原因</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100cu0k.html</link>
            <description><![CDATA[<p>今天遇到了一个问题，在页面上部署了一个 Flash，然后通过 JS 去调用它的方法。部署的代码如下：</P>
<div STYLE="PADDING-RIGHT: 0px; BORDER-TOP: #666 1px dashed; PADDING-LEFT: 0px; FONT-SIZE: 12px; PADDING-BOTTOM: 20px; MARGIN: 20px 0px; COLOR: #666; PADDING-TOP: 20px; BORDER-BOTTOM: #666 1px dashed">
&lt;object width="1" height="1"&gt;<br />
&lt;param name="quality" value="high"
/&gt;<br />
&lt;param name="bgcolor" value="#FFFFFF"
/&gt;<br />
&lt;param name="allowScriptAccess" value="always"
/&gt;<br />
&lt;param name="movie"
value="http://127.0.0.1/test.swf" /&gt;<br />
&lt;embed id="testswf" name="testswf"
pluginspage="http://www.macromedia.com/go/getflashplayer"
src="http://127.0.0.1/test.swf"
type="application/x-shockwave-flash" bgcolor="#FFFFFF"
allowScriptAccess="always" width="1"
height="1"&gt;&lt;/embed&gt;<br />

&lt;/object&gt;</DIV>
<p>调用方法 document.getElementById("testswf").testFunction();，居然发现 IE
下提示不支持该方法，而在Firefox 下是没有问题的。百思不得其解，这个 Flash
已经成功加载，为了确保是加载成功的，在加载完成的时候还调用了页面的一个 alert 方法。</P>
<br />
<p>结果一番尝试下，发现原因有二：</P>
<p>一、IE 下 OBJECT 缺少了
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 这个属性。</P>
<p>二、IE 下不能通过 EMBED ID 去调用 Flash 方法。Firefox 下能使用 EMBED ID 调用 Flash
方法，但是使用 OBJECT ID 不行。</P>
<br />
<p>各个浏览器对 Flash 标签的解析机制不一样：</P>
<p STYLE="FONT-SIZE: 12px; COLOR: #0000ff">·Firefox 不支持 object 中
classid 属性，只支持 type 属性，而如果发现 object 有 classid 属性以后，它将不理会
object，而只执行 embed。</P>
<p STYLE="FONT-SIZE: 12px; COLOR: #0000ff">·而对于 Opera 则很有趣，它既支持
object，又支持 embed，但是因为 embed 是嵌入到 object 中的，如果它能正确识别 object，它就不再理会
embed，如果它不能识别 object，则执行 embed。因此它不会显示两个播放器。</P>
<p STYLE="FONT-SIZE: 12px; COLOR: #0000ff">·而 Internet Explorer
则只识别 object 中的 classid 属性。因此在 object 中，我们不需要指定 type 属性。</P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>我的JS脚本心得</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100cu0k.html#comment</comments>
            <pubDate>Mon, 16 Mar 2009 14:12:50 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100cu0k.html</guid>
        </item>
        <item>
            <title>手把手教你如何在博客插入大图片</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100cs30.html</link>
            <description><![CDATA[<p STYLE="FONT-SIZE: 12px; MARGIN: 20px 0px"><b>相关文章</B><br />
<a HREF="http://blog.sina.com.cn/s/blog_56872d5f0100ae59.html" TARGET="_blank">相册--博客--论坛批量发大图全攻略！原创~~~~</A>（肚丫妈妈提供）<br />
<a HREF="http://blog.sina.com.cn/s/blog_4c25a1bf0100d7cy.html" TARGET="_blank">sina博客上发多幅大图的一个巧方法</A>（小珠子爸爸提供）<br />
<br /></P>
<p>最近博客做了升级，很多用户发现插入的图片都显示为500px，如果需要插入大图，可以按照下面的步骤来实现：</P>
<p>&nbsp;</P>
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static7.photo.sina.com.cn/orignal/53d96fe3t64e3c7a92846" TARGET="_blank"><img SRC="http://static7.photo.sina.com.cn/orignal/53d96fe3t64e3c7a92846" /></A></CENTER>
<br />
<br />
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static7.photo.sina.com.cn/orignal/53d96fe3t64e3c81db296" TARGET="_blank"><img SRC="http://static7.photo.sina.com.cn/orignal/53d96fe3t64e3c81db296" /></A></CENTER>
<br />
<br />
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static4.photo.sina.com.cn/orignal/53d96fe3t64e3c89c81f3" TARGET="_blank"><img SRC="http://static4.photo.sina.com.cn/orignal/53d96fe3t64e3c89c81f3" /></A></CENTER>
<br />
<br />
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static5.photo.sina.com.cn/orignal/53d96fe3t64e3c8febe04" TARGET="_blank"><img SRC="http://static5.photo.sina.com.cn/orignal/53d96fe3t64e3c8febe04" /></A></CENTER>
<br />
<br />
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static16.photo.sina.com.cn/orignal/53d96fe3t64e3c94b1ddf" TARGET="_blank"><img SRC="http://static16.photo.sina.com.cn/orignal/53d96fe3t64e3c94b1ddf" /></A></CENTER>
<br />
<br />
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static12.photo.sina.com.cn/orignal/53d96fe3t64e3cb5a7f6b" TARGET="_blank"><img SRC="http://static12.photo.sina.com.cn/orignal/53d96fe3t64e3cb5a7f6b" /></A></CENTER>
<br />
<br />
<center><a HREF="http://blog.photo.sina.com.cn/showpic.html#url=http://static1.photo.sina.com.cn/orignal/53d96fe3t64e3cbc52a70" TARGET="_blank"><img SRC="http://static1.photo.sina.com.cn/orignal/53d96fe3t64e3cbc52a70" /></A></CENTER>
<br />
<br />
<p>&nbsp;</P>]]></description>
            <author>淡淡花香入梦来</author>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100cs30.html#comment</comments>
            <pubDate>Thu, 12 Mar 2009 03:14:45 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100cs30.html</guid>
        </item>
        <item>
            <title>HttpWatch中的ERROR_INTERNET_INVALID_URL错误</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100clc0.html</link>
            <description><![CDATA[<p>原文：<a HREF="http://blog.httpwatch.com/2007/11/20/error_internet_invalid_url-httpwatch/" TARGET="">ERROR_INTERNET_INVALID_URL &amp;
HttpWatch</A></P>
<p>一些用户反映，最近在他们的页面中通过 HttpWatch 抓包，有发现请求 http://:/
这样的地址，想知道发生这种问题的原因。这样的 URL 会在 IE6 中显示 “ERROR 0x57”，而在 IE7
中显示为“ERROR_INTERNET_INVALID_URL”。</P>
<p>发生这样的错误都有一个共同的原因。他们一般都使用了 JQuery 或者 YUI 的 Javascript
库。很难立即发现是哪里生成了这个 URL，我们使用 IE Developer Toolbar 检查后发现，没有哪个 DOM
节点使用了这个 URL。</P>
<p>我们使用当前的 jQurey 库建立了一个简单的<a HREF="http://www.httpwatch.com/demos/jquery/" TARGET="">测试页</A>。如果你使用
HttpWatch 抓包，你就能看见页面加载后，对 http://:/ 地址的请求被记录了下来。</P>
<a HREF="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a479309067" TARGET="_blank"><img SRC="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a479309067" ALT="jQuery Demo in IE7" /></A>
<p>IE7 下抓图</P>
<a HREF="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a479e68575" TARGET="_blank"><img SRC="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a479e68575" ALT="jQuery Demo in IE6" /></A>
<p>IE6 下抓图</P>
<p>我们猜想会不会是 IE 自动加上了 http: 前缀和最后的反斜杠，于是，我们查找 //:。HttpWatch 高亮显示了
jquery.js 中的如下代码片段。它的作用是，在 IE 下做一个 Hack 来触发一个事件，效果等同于 Firefox 中
DOMContentLoaded 事件。</P>
<a HREF="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a47879eb11" TARGET="_blank"><img SRC="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a47879eb11" ALT="IE Defer Script Hack" /></A>
<p>jQuery 库不使用标准的 window.onload
事件，是因为该事件会等到页面和页面内的全部图片完全加载成功后才会被触发。如果图片较多，或者图片较大，会造成页面上的 JS
函数执行被严重地滞后。使用 DOMContentLoaded 事件的优点就在于，一旦页面的 Dom 节点完成后，JS
就可以安全的操作这些节点，而不会触发 IE 终止错误。</P>
<p>因此，在 IE 下创建了一个带有 defer 属性临时的 SCRIPT 标签，来产生一个与 DOMContentLoaded
事件相同作用的事件。（注：该 SCRIPT 标签的 onreadystatechanged 中可以监测 SCRIPT 的加载状态，如果
readyState 属性为 complete，就证明 DOM
节点已经完成并且可以操作。关于这种方法的可靠性，我们在另一篇文章中单独探讨）然而，如果 SCRIPT 标签有一个 defer 属性，
SCRIPT 必须有一个 src 属性的时候才会触发 onreadystatechanged 事件。就是这里的 src
属性引起了这个错误的 URL 请求。</P>
<p>临时的 SCRIPT 标签会在事件触发后被删除，因此无法在页面的 DOM 节点中看到。</P>
The temporary <p>相同的例子是使用 YUI 库：</P>
<a HREF="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a47aaab57e" TARGET="_blank"><img SRC="http://static2.photo.sina.com.cn/orignal/53d96fe3t63a47aaab57e" ALT="YUI Defer Script Hack" /></A>
<p>如果你访问 YUI Event 示例，你仍然可以看到这个错误：</P>
<a HREF="http://static2.photo.sina.com.cn/orignal/53d96fe3t705d3f8785cd" TARGET="_blank"><img SRC="http://static2.photo.sina.com.cn/orignal/53d96fe3t705d3f8785cd" ALT="YUI Event Example" /></A>
<p>SCRIPT 标签的 src 设置为 //: 是整个问题的根源。如果它是一个真实有效的
URL，必然导致一个冗余的网络请求。这个无效的URL 请求会在 HttpWatch
中显示为一个错误，但是会带来最小程度的性能开销。YUI Event 实例中我们可以看到，它仅仅增加了 3 毫秒的下载时间。</P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>翻译和整理文章</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100clc0.html#comment</comments>
            <pubDate>Tue, 24 Feb 2009 06:43:54 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100clc0.html</guid>
        </item>
        <item>
            <title>转：正则表达式有无g参数时，test()结果的差异</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100bpny.html</link>
            <description><![CDATA[<p>有g参数的正则表达式：</P>
<p>var kk=/\w\w/g;</P>
<p>var kk=new RegExp("\\w\\w","g");</P>
<p>如果正则表达式有指定g参数全局匹配 ， 则每次test()是依次获得下一个匹配。举例说明</P>
<p>var s="AABBCC";</P>
<p>var kk=/(\w\w)/g;</P>
<p>for(i=0;i&lt;8;i++){</P>
<p>document.write
("&lt;br&gt;"+kk.test(s));</P>
<p>}</P>
<p>上面的代码结果是3个true，1个false，再3个true，再1个false。</P>
<p>true</P>
<p>true</P>
<p>true</P>
<p>false</P>
<p>┄</P>
<p>第1次test匹配AA，第2次test匹配BB，第3次test匹配CC，第4次test找不到匹配，之后又从头重新开始：</P>
<p>第5次同第1次，第6次同第2次，┄┄。</P>
<p>所以会出现test有时候true，有时候false的情况。这里的正则表达式必须是指定了g参数的。</P>
<p>利用这一特点，可以用while循环遍历所有正则匹配：</P>
<p>var s="AA_123_BB_456_CC";</P>
<p>var kk=/((\w)\2)/g;</P>
<p>while(kk.test(s)){</P>
<p>document.write
("&lt;br&gt;"+RegExp.$1);</P>
<p>}</P>
<p>得到结果：</P>
<p>AA</P>
<p>BB</P>
<p>CC</P>
<p>如果正则表达式没有g参数，则每次test都是从头开始匹配，不存在上述问题。</P>
<p>没有g参数的正则表达式：</P>
<p>var kk=/\w\w/;</P>
<p>var kk=new RegExp(\\w\\w);测试：</P>
<p>var s="AABBCC";</P>
<p>var kk=/(\w\w)/;</P>
<p>for(i=0;i&lt;8;i++){</P>
<p>document.write
("&lt;br&gt;"+kk.test(s));</P>
<p>}</P>
<p>上面的代码结果是8个true，每次都是AA匹配。</P>
<p>true</P>
<p>true</P>
<p>true</P>
<p>true</P>
<p>┄</P>
<p>本文转自：<a HREF="http://blog.csdn.net/cuixiping/archive/2007/07/03/1677020.aspx" TARGET="_blank">无心的专栏</A></P>]]></description>
            <author>淡淡花香入梦来</author>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100bpny.html#comment</comments>
            <pubDate>Tue, 18 Nov 2008 14:45:46 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100bpny.html</guid>
        </item>
        <item>
            <title>转：通过浏览器从SVN更新代码到Linux服务器指定目录</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100blbq.html</link>
            <description><![CDATA[　　[文章作者：张宴 本文版本：v1.0 最后修改：2008.10.06 转载请注明原文链接：<a HREF="http://blog.s135.com/read.php/371.htm" TARGET="_blank"><font COLOR="#4F6371">http://blog.s135.com/read.php/371.htm</FONT></A>]<br />

<br />
　　今天花几分钟写的一个PHP小程序，用途是：无需给程序员开放服务器SSH帐号，只需通过Web浏览器即可从SVN版本库更新代码到Linux服务器的指定目录。如果有需要，可以给这段代码加个密码登录。<br />

<br />
　　1、假设www、www是Apache或Nginx服务器的用户名和组，/data0/www/是网页文件存放根目录，执行以下shell命令：<br />

<div STYLE="BORDER-RIGHT: #00a0c6 1px dashed; PADDING-RIGHT: 3px; BORDER-TOP: #00a0c6 1px dashed; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 5px 5px 0px; BORDER-LEFT: #00a0c6 1px dashed; PADDING-TOP: 3px; BORDER-BOTTOM: #00a0c6 1px dashed; BACKGROUND-COLOR: #ffffff">
sudo -s<br />
/usr/sbin/groupadd www -g 48<br />
/usr/sbin/useradd -u 48 -g www www<br />
mkdir -p /data0/www/<br />
chown -R www:www /data0/www/<br />
su www<br />
cd /data0/www/<br />
/usr/local/bin/svn checkout --username zhangyan --password 123456
<a HREF="http://xxx.xxx.xxx.xxx:8080/svn/web/trunk/" TARGET="_blank"><font COLOR="#4F6371">http://xxx.xxx.xxx.xxx:8080/svn/web/trunk/</FONT></A></DIV>
<br />
<br />
　　2、创建文件svn_up.php：<br />
<div CLASS="dp-highlighter">
<ol CLASS="dp-c">
<li CLASS="alt"><span><span>&lt;?php
&nbsp;&nbsp;</SPAN></SPAN></LI>
<li CLASS=""><span>header(</SPAN><span CLASS="string"><font COLOR="#0000FF">"Cache-Control:no-cache,must-revalidate"</FONT></SPAN><span>);
&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt"><span CLASS="vars"><font COLOR="#DD0000">$handle</FONT></SPAN><span>&nbsp;=&nbsp;popen(</SPAN><span CLASS="string"><font COLOR="#0000FF">'/usr/local/bin/svn&nbsp;up&nbsp;--username&nbsp;zhangyan&nbsp;--password&nbsp;123456&nbsp;/data0/www/*'</FONT></SPAN><span>,&nbsp;</SPAN><span CLASS="string"><font COLOR="#0000FF">'r'</FONT></SPAN><span>);
&nbsp;&nbsp;</SPAN></LI>
<li CLASS=""><span CLASS="vars"><font COLOR="#DD0000">$read</FONT></SPAN><span>&nbsp;=&nbsp;stream_get_contents(</SPAN><span CLASS="vars"><font COLOR="#DD0000">$handle</FONT></SPAN><span>);</SPAN><span CLASS="comment"><font COLOR="#008000">//需要&nbsp;PHP5&nbsp;或更高版本</FONT></SPAN>
<span>&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt"><span CLASS="func">echo</SPAN><span>&nbsp;</SPAN><span CLASS="string"><font COLOR="#0000FF">"&lt;pre&gt;"</FONT></SPAN><span>;
&nbsp;&nbsp;</SPAN></LI>
<li CLASS=""><span>printf(</SPAN><span CLASS="vars"><font COLOR="#DD0000">$read</FONT></SPAN><span>);
&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt"><span CLASS="func">echo</SPAN><span>&nbsp;</SPAN><span CLASS="string"><font COLOR="#0000FF">"&lt;/pre&gt;"</FONT></SPAN><span>;
&nbsp;&nbsp;</SPAN></LI>
<li CLASS=""><span>pclose(</SPAN><span CLASS="vars"><font COLOR="#DD0000">$handle</FONT></SPAN><span>);
&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt">
<span>?&gt;&nbsp;&nbsp;</SPAN></LI>
</OL>
</DIV>
<textarea CLASS="php" STYLE="DISPLAY: none" NAME="code" ROWS="15" COLS="100">
&lt;?php
header("Cache-Control:no-cache,must-revalidate");
$handle = popen('/usr/local/bin/svn up --username zhangyan --password 123456 /data0/www/*', 'r');
$read = stream_get_contents($handle);//需要 PHP5 或更高版本
echo "&lt;pre&gt;";
printf($read);
echo "&lt;/pre&gt;";
pclose($handle);
?&gt;
</TEXTAREA>
<br />
　　3、通过浏览器访问svn_up.php，显示以下内容（例）：<br />
　　<span STYLE="COLOR: #008000">U &nbsp;
&nbsp;/data0/www/app/DataTransferService.php<br />
　　Updated to revision 561.</SPAN><br />]]></description>
            <author>淡淡花香入梦来</author>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100blbq.html#comment</comments>
            <pubDate>Thu, 06 Nov 2008 15:25:31 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100blbq.html</guid>
        </item>
        <item>
            <title>Aptana 之 Eclipse Monkey 脚本开发（二）</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100bi9l.html</link>
            <description><![CDATA[<h4>创建一个新的 Eclipse Monkey 脚本</H4>
<p>如何创先一个新的 Eclipse Monkey 脚本？</P>
<p><b>介绍</B></P>
<p>一旦你安装了 Eclipse Monkey 插件后，你就能迅速且轻松的开始创建你自己的 Eclipse Monkey
脚本了。下文告诉你怎么创建一个简单的、普通的 Eclipse Monkey 脚本。</P>
<b>步骤</B>
<ol>
<li>在你的工作空间中新建一个空的项目，在项目下建立一个 scripts 目录或者 monkey 目录。</LI>
<li>在该目录下创建一个新的 JS文件，扩展名是 *.js 或者 *.em。</LI>
<li>给你的脚本配置 metedata 信息 (详见 给 Eclipse Monkey 脚本增加元数据
(metadata))</LI>
<li>开始编写和保存你的脚本。接下来，你就可以在 Scripts 面板看到该脚本，双击或者右键选择 Execute
来执行它既可。</LI>
</OL>
<h4>给 Eclipse Monkey 脚本增加元数据 (metadata)</H4>
<p>下面介绍 Eclipse Monkey 脚本中选项和代码</P>
<b>介绍</B>
<p>增加元数据 (metadata) 到你的脚本用于告诉 Eclipse 怎么运行你的脚本。下面是你可以增加到脚本中的所有元数据
(metadata) 类型：</P>
<ul>
<li>菜单标签 Menu label</LI>
<li>快捷键 Hotkey(s)</LI>
<li>监听器 Listener(s)</LI>
<li>作者信息 Kudos to the writer(s)</LI>
<li>授权信息 License information</LI>
<li>DOM 地址 DOM URL</LI>
</UL>
<p>所有元数据都是可选的；它仅仅是约束你的脚本按照你想要的方式运行。</P>
<p>下面的例子显示了元数据中的一些常规用法。在这个例子中，脚本名叫 Fun with Monkey，能够通过主菜单 Scripts
-&gt; Fun with Monkey 菜单、Alt + M 快捷键来运行，也会在 Eclipse
加载时候运行 main 函数。这段脚本是 Michelle Petersen 编写，遵守 Eclipse Public License
1.0，集成了 sample.doms DOM 对象 (在 Aptana
代码片断网站上可见)。下文的详细参考会给你更加详细的说明，指导你使用每个元数据。</P>
／*<br />
* Menu: Fun with Monkey<br />
* Key: M3+M<br />
* Kudos: Michelle Petersen<br />
* License: EPL 1.0<br />
* DOM: http://snippets.aptana.com/sample.doms<br />
* OnLoad: main()<br />
*／<br />
-------------------
<h3>元数据参考手册</H3>
<b>菜单元素据 Menu metadata</B>
<p>给脚本增加菜单信息的方式：</P>
<p>·增加关键字 Menu 到你的元数据中</P>
<p>·所有菜单都会显示在 Scripts 主菜单下</P>
<p>·使用标准的 Eclipse 语法来创建菜单和子菜单项</P>
<p>示例1：</P>
<p>Menu: Fun with Monkey</P>
<p>在上面的例子中，你可以通过 Scripts -&gt; Fun with Monkey 来访问</P>
<p>示例2：</P>
<p>Menu: my_submenu &gt; Fun with Monkey</P>
<p>在上面的例子中，你可以通过 Scripts -&gt; my_submenu
&gt; Fun with Monkey 来访问</P>
<b>按键元数据 Key metadata</B>
<p>使用 Key 关键字给你的脚本增加一个快捷键</P>
<p>增加快捷键到脚本的方式：</P>
<p>·增加 Key 关键字到元数据</P>
<p>·使用下列的修饰键 + ASCII 键</P>
<p>M1 (Command 或者 Ctrl)</P>
<p>M2 (Shift)</P>
<p>M3 (Option 或者 Alt)</P>
<p>M4 (Mac 上的 Ctrl)</P>
<p>·已经经过验证的 (非首选)：ALT、COMMAND CTRL 和 SHIFT</P>
<p>·也可以到 Eclipse
站点查看更多的快捷键代码：http://www.eclipse.org/dash/monkey-help.php?key=writing</P>
<p>示例：</P>
<p>下面的例子使用 Alt + M 快捷键来调用脚本</P>
<p>Key: M3+M</P>
<b>图像元数据 Image metadata</B>
<p>使用 Image
关键字可以在工具栏上增加一个小图标来运行你的脚本。你可以单击指定的图标来运行你的脚本。你需要指定图片的路径来设置你脚本所显示图标。</P>
<p>示例：</P>
<p>Image: ../Images/iconComment.png</P>
<b>监听器元数据 Listener metadata</B>
<p>使用 Listener 关键字可以增加一个事件监听到你的元数据中。这可以让你的脚本在指定事件触发时候运行。</P>
<p>增加事件监听到你的脚本：增加 Listener 关键字到你的元数据。它将追加到指定的时间上。</P>
<p>示例：</P>
<p>Listener: commandService().addExecutionListener(this);</P>
<b>文档对象模型元数据 DOM metadata</B>
<p>使用 DOM 关键字来指定你的脚本需要的 DOM 对象</P>
<p>增加 DOM 信息到你的脚本：</P>
<p>·增加 DOM 关键字到你的元数据</P>
<p>·DOM 像其他插件一样使用它，即使你没有安装它，Eclipse 也会自动替你下载它。</P>
<p>你可以使用集成的 DOM 或者指定一个 URL</P>
<p>例如 window (集成的)</P>
<p>例如 http:/// (插件 DOM)</P>
<p>示例：</P>
<p>下面的代码将从 Aptana snippets 站点下载 sample.doms DOM 对象。</P>
<b>onLoad 元数据</B>
<p>使用 onLoad 关键字使你的脚本在 IDE 启动的时候就运行</P>
<p>·增加 onLoad 关键字到你的元数据</P>
<p>·指定你想 Eclipse 载入时候调用的函数名</P>
<p>示例</P>
<p>下面的例子是 Eclipse 载入的时候执行 main() 函数</P>
<p>OnLoad: main()</P>
<b>Kudos 元数据</B>
<p>使用 Kudos 来描述你自己或者脚本的创建者信息</P>
<p>·增加 Kudos 关键字到你的元数据</P>
<p>示例</P>
<p>Kudos: Michelle Petersen</P>
<b>授权元数据 License metadata</B>
<p>使用 License 关键字指定你脚本的授权信息</P>
<p>·增加 License 关键字到你的元数据</P>
<p>示例</P>
<p>下面的例子指定授权为 Eclipse Public License 1.0</P>
<p>License: EPL 1.0</P>]]></description>
            <author>淡淡花香入梦来</author>
            <category>Aptana_初体验</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100bi9l.html#comment</comments>
            <pubDate>Wed, 29 Oct 2008 14:58:17 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100bi9l.html</guid>
        </item>
        <item>
            <title>Aptana 之 Eclipse Monkey 脚本开发（一）</title>
            <link>http://blog.sina.com.cn/s/blog_53d96fe30100bhoh.html</link>
            <description><![CDATA[<h3>关于 Eclipse Monkey</H3>
<p>Eclipse Monkey 是一个动态脚本工具，它能够帮助你在 Eclipse 或者 Aptana Studio
中利用脚本语言完成一些重复而单调的任务。你编写 Eclipse Monkey 脚本的时候，你的脚本并不是处于 API
层面上，所以你根本不需接触真实的 Eclipse 代码，也不需开发独立的 Java 插件来执行这些简单的任务。</P>
<h4>Eclipse Monkey 特性</H4>
<p>环境需求：Eclipse Monkey 目前作为 Eclipse V3.2 或者 V3.3 的一个插件，要求你最少有
Eclipse V3.2，目前 Aptana Studio Professional 1.2 是集成的 Eclipse
V3.3</P>
<p>Eclipse Monkey 的主要历史：</P>
<ul>
<li>由 Ward Cunningham 和 Bjorn Freeman-Benson 开发</LI>
<li>集成为 Mozilla 的 Greasemonkey 脚本工具</LI>
<li>2007 年 3 月集成到 Aptana Studio 中</LI>
<li>将作为 Europa(Eclipse V3.3) 的一部分同步发行</LI>
</UL>
<p>脚本的优点：脚本显然比在成熟的 Java 开发环境中对 Eclipse UI 做一些小的改变来得容易</P>
<ul>
<li>使用 Javascript 编写脚本，容易入门</LI>
<li>不需要写新的插件</LI>
<li>与真实 Eclipse 代码完全不冲突</LI>
<li>脚本与项目捆绑在一起</LI>
<li>利用 HTML 和 Javascript 来创建 Eclipse 视图</LI>
<li>可以建立快捷键来运行脚本</LI>
</UL>
<p>支持的语言</P>
<p>目前，Eclipse Monkey 支持 Javascript 和 Ruby。将来，还将支持 Groovy。</P>
<p>Eclipse Monkey DOMs</P>
<p>基于文档对象模型 (DOMs) 的脚本可以避免改变真实的 Eclipse 代码。Eclipse Monkey 具备几个内置
DOMs (如 window)，你也可以指定一个可更新的、包含 DOM 信息的站点 URL，来下载或者使用该 DOM 对象。</P>
<p>&nbsp;</P>
<p>运行 Eclipse Monkey 脚本</P>
<p>&nbsp;</P>
<p>Eclipse Monkey 提供了集中方式来运行您的 Eclipse Monkey 脚本</P>
<ul>
<li>从菜单项中运行</LI>
<li>快捷键</LI>
<li>Scripts 面板 (右键选择 Execute 或者双击)</LI>
<li>被事件触发</LI>
<li>启动时运行</LI>
</UL>
<p>您可以阅读给 Eclipse Monkey 脚本增加元数据 (metadata) 来了解怎样配置您的 Eclipse
Monkey 脚本以便能按照你自己的意图来运行它。</P>
<h3>关于 Eclipse Monkey 示例项目</H3>
<p>下面介绍一下在 Eclipse Monkey 插件中集成的一些示例项目。</P>
<p>Eclipse Monkey 包含了一些示例项目来帮助您开始您的 Eclipse Monkey 脚本之旅。你可以在
Scripts 面板中看到这些脚本。</P>
<b>示例项目</B>
<p>下面是当前的示例项目的一个简要说明：</P>
<ul>
<li>Editors__Comment_Lines.js - 对当前选择行进行注释或者取消注释</LI>
<li>Samples__Replace_Selection_with_Date.js - 把当前选择的文本替换成当前日期</LI>
<li>Samples_System_Prints.js - 输出当前匹配的文件到任务列表面板。</LI>
<li>Samples__Hello_World.js - 对话框显示最基础的脚本 "Hello world"</LI>
<li>Samples__File_Sample.js - 往一个文件里写入信息</LI>
<li>Samples__Web_Request_Sample.js - 创建一个新的 Web 请求</LI>
<li>Views__Google_Web_View.js - 使用 Google 首页创建一个新的 web 面板</LI>
</UL>]]></description>
            <author>淡淡花香入梦来</author>
            <category>Aptana_初体验</category>
            <comments>http://blog.sina.com.cn/s/blog_53d96fe30100bhoh.html#comment</comments>
            <pubDate>Tue, 28 Oct 2008 01:21:03 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_53d96fe30100bhoh.html</guid>
        </item>
    </channel>
</rss>
