<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A colourful bubble? &#187; WebDevelop</title>
	<atom:link href="http://www.paopao.name/category/programme/webdevelop/feed" rel="self" type="application/rss+xml" />
	<link>http://www.paopao.name</link>
	<description>生活 读书 新知</description>
	<lastBuildDate>Wed, 20 May 2009 02:22:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordPress 搜索框添加文字提示</title>
		<link>http://www.paopao.name/programme/javascript/wordpress-searchbox-text-prompt.html</link>
		<comments>http://www.paopao.name/programme/javascript/wordpress-searchbox-text-prompt.html#comments</comments>
		<pubDate>Sun, 10 May 2009 11:29:51 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[searchbox]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.paopao.name/?p=165</guid>
		<description><![CDATA[搜索框里显示文字提示是目前常见的一种技术了，但是实现的方法有很多种，mg12 介绍一个使用 jQuery 添加文字提示的方法。
这个方法相比于原来直接添加 &#8220;input&#8221; 元素的值为提示文字的... ]]></description>
			<content:encoded><![CDATA[<p>搜索框里显示文字提示是目前常见的一种技术了，但是实现的方法有很多种，<a href="http://www.neoease.com/" target="_blank">mg12</a> 介绍一个<a href="http://www.neoease.com/wordpress-searchbox-tip/" target="_blank">使用 jQuery 添加文字提示</a>的方法。</p>
<p>这个方法相比于原来直接添加 &#8220;input&#8221; 元素的值为提示文字的办法，提升了可用性和可访问性，不过也存在两个缺点。一个是 mg12 自己也提到的不方便国际化的问题；另一个则是，如果用户要搜索的关键词和默认的文字提示相同时，则无法进行搜索。当然，你也可以认为第二个问题是我钻牛角尖，也许根本没有人会用默认的文字提示作为搜索关键词。其实我也认为不会出现这种情况，我只是想提出另一种思路来实现搜索框的文字提示，这个办法应该可以解决上面提到的两个问题。</p>
<p>下面是我修改我这个主题的搜索框提示的方法：</p>
<p>首先我需要对搜索框部分的主题文件做一点小小的修改</p>
<pre class="brush: php;">
&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;/&quot;&gt;
&lt;div&gt;&lt;input type=&quot;text&quot; value=&quot;&lt;?php the_search_query(); ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; title=&quot;&lt;?php _e('Type text to search here...'); ?&gt;&quot; /&gt;
&lt;input type=&quot;submit&quot; id=&quot;searchsubmit&quot; value=&quot;Search&quot; /&gt;
&lt;/div&gt;
&lt;/form&gt;
</pre>
<p>以上是我这个主题文件的 searchform.php 文件的内容，我做的修改只是给 &#8220;input&#8221; 元素添加了一个属性</p>
<blockquote><p> title=&#8221;&lt;?php _e(&#8217;Type text to search here&#8230;&#8217;); ?&gt;&#8221; </p></blockquote>
<p>这样就解决了提示文字的国际化问题，如果在语言文件里有定义就可以直接使用了。</p>
<p>然后就是 jQuery 的部分</p>
<pre class="brush: jscript;">
jQuery(document).ready(function(){
    // DOM 加载完毕时添加搜索提示
    // 修改搜索框的背景色为透明，以便显示其下方的文字
    $(&quot;input#s&quot;).css({backgroundColor:&quot;transparent&quot;});

    $(&quot;input#s&quot;)
        // 将搜索框的上层元素改为相对定位
        .parent().css({position:&quot;relative&quot;})
        // 添加一个绝对定位的 span 至搜索框的下方来显示文字提示
        .append('&lt;span id=&quot;searchtip&quot; style=&quot;position:absolute; top:2px; left:10px; color:#999; display:none; z-index:-1;&quot;&gt;' + $(&quot;input#s&quot;).attr(&quot;title&quot;) + '&lt;/span&gt;');

    // 如果搜索框内容为空则显示提示
    if($(&quot;input#s&quot;).val() == &quot;&quot;) {
        $(&quot;#searchtip&quot;).show();
    }

    // 当鼠标聚焦在搜索框
    $(&quot;input#s&quot;).focus(function(){
        // 如果搜索框内容为空则隐藏提示
        if($(this).val() == &quot;&quot;) {
            $(&quot;#searchtip&quot;).hide();
        }
    }).blur(function(){
        // 如果搜索框内容为空则显示提示
        if($(this).val() == &quot;&quot;) {
            $(&quot;#searchtip&quot;).show();
        }
    });

    // 当搜索表单提交时
    $(&quot;#searchform&quot;).submit(function(){
        // 如果搜索框内容为空则不提交
        if($(&quot;input#s&quot;).val() == &quot;&quot;) {
            return false;
        }
        return true;
    });

    // 解决 IE 8 透明背景色的问题
    $(&quot;#searchtip&quot;).click(function(){$(&quot;input#s&quot;).trigger(&quot;focus&quot;);});
});
</pre>
<p>这个方法的原理也很简单，就是在搜索框的后面加入一个绝对定位的 &#8220;span&#8221; 元素来显示文字提示，文字提示的内容则是通过获取搜索框的 title 值来添加。</p>
<p>以上就完成了搜索框文字提示的添加，下面是我在这个过程中遇到的一个问题。</p>
<p>注意到上面的最后一行代码了吗，是为了解决在 IE 8 下的一个问题的，本来可以不需要这行代码的，就是为了万恶的 IE &#8230;</p>
<p>问题是这样的，当一个绝对定位的元素位于一个 &#8220;input&#8221; 元素的下方时，在 IE 8 下你依旧可以用鼠标访问到这个元素，导致点击搜索框时无法获得焦点，在其他<a href="http://www.paopao.name/browsers">我测试的浏览器</a>中都没有这个问题。所以在 IE 8 下，需要为提示文字的 &#8220;span&#8221; 元素额外的绑定一个监听事件。而且有点奇怪的是，把 &#8220;input&#8221; 元素换成 &#8220;div&#8221; 元素后，IE 8 下的表现又和其他浏览器一致了。</p>
<p>关于这个问题我做了一个简单的<a href="http://paosha.net/demo/single/searchboxtip.html" target="_blank">演示 Demo</a> 页面，有兴趣的可以去看看，我手头没有 IE 7 和 IE 6 ，不知道这两个浏览器是不是存在同样的问题，另外如果你有解决这个问题的办法，也请多多指教。</p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=165&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/javascript/wordpress-searchbox-text-prompt.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>基于 jQuery 的旗帜效果纵向多级导航菜单</title>
		<link>http://www.paopao.name/programme/javascript/flag-style-multi-level-vertical-navigation-menu.html</link>
		<comments>http://www.paopao.name/programme/javascript/flag-style-multi-level-vertical-navigation-menu.html#comments</comments>
		<pubDate>Sun, 10 May 2009 04:55:28 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[easing]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[multi-level]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.paopao.name/?p=141</guid>
		<description><![CDATA[最近看了一些<a href="http://www.google.com/search?hl=en&#038;q=jQuery+navigation&#038;btnG=Google+Search&#038;aq=f&#038;oq=" target="_blank">基于 jQuery 的好玩的导航菜单</a>，然后就想到了这样一个效果的菜单，其实我也... ]]></description>
			<content:encoded><![CDATA[<p>最近看了一些<a href="http://www.google.com/search?hl=en&#038;q=jQuery+navigation&#038;btnG=Google+Search&#038;aq=f&#038;oq=" target="_blank">基于 jQuery 的好玩的导航菜单</a>，然后就想到了这样一个效果的菜单，其实我也不知道该叫它什么效果，就叫旗帜效果 (flag style) 吧。</p>
<p>先来看看最终效果是什么样的： <a href="http://paosha.net/demo/flagnav/" target="_blank">演示(Demo)</a></p>
<p>一个导航菜单，最重要的是可访问性，其他的效果都是为了锦上添花的，所以首先我们要做一个纯 CSS 的纵向导航菜单，这样即使用户关闭了 JavaScript 也能无障碍的访问。</p>
<p><strong>第一步：</strong> 一个语义化的 HTML 结构</p>
<pre class="brush: xml;">
&lt;h2&gt;Flag Navigation&lt;/h2&gt;
&lt;ul id=&quot;nav&quot; class=&quot;nav&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;1 HTML&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2 CSS&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2.1 CSS 2&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;2.2 CSS 3&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;3 JavaScript&lt;/a&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;3.1 jQuery&lt;/a&gt;
                &lt;ul&gt;
                    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;3.1.1 Download&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;3.1.2 Tutorial&lt;/a&gt;&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;3.2 Mootools&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;#&quot;&gt;3.3 Prototype&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>一般来说，我们都使用一个嵌套的无序列表来表示一个多级导航菜单。</p>
<p><strong>第二步： </strong>给这段 HTML 加上一些样式</p>
<pre class="brush: css;">
body {font: 15px &quot;Arial&quot;}
h2 {font: 18px &quot;Arial&quot;; font-weight: bold; }
.nav, .nav ul{
    width:140px; /* 定义每级菜单的宽度 */
    margin:0;
    padding:0;
    list-style-type:none;
    list-style-position:outside;
    position:relative; /* 采用相对定位，为子菜单的绝对定位提供基准元素 */
    line-height:30px;  /* 定义每条菜单的行高 */
}
.nav a:link, .nav a:visited{ /* 定义链接的基本样式 */
    display:block;
    width:130px; /* 这里的宽度和下面的 padding 加起来是 140px */
    padding:0px 5px;
    color:#fff;
    text-decoration:none;
    background:url(bg.png) no-repeat -261px 0px; /* 背景图片定位，采用 CSS Sprites 技术 */
}
.nav a:hover,a:active{ /* 定义链接的悬停和点击时的样式 */
    background-position:-79px 0px;  /* 修改背景图片定位 */
    color:#333;
}
.nav li{  /* 每条菜单的定位方式为相对定位 */
    position:relative;
}
.nav ul {  /* 子菜单的样式 */
    position:absolute; /* 采用绝对定位 */
    top:0px; /* 子菜单和上一级菜单上部平齐 */
    left:140px; /* 子菜单显示在上一级菜单右侧 */
    display:none; /* 子菜单不显示 */
}
.nav li:hover&gt;ul{
    display:block; /* 当 list 悬停时，显示它的下一级子菜单 */
}
</pre>
<p>在 &#8220;ul&#8221; 的样式中使用 line-height 是为了让菜单文字能纵向居中，同时这个值在我们后面的 jQuery flagNav 插件中有使用到。<br />
这样我们就得到了一个纯 CSS 的纵向多级导航菜单，具体效果可以看看 <a href="http://paosha.net/demo/flagnav/" target="_blank">Demo</a> 页面的第一个菜单。<br />
<strong>*</strong>这个菜单的效果在 IE6 及其之前的浏览器中是表现不出来的，因为 IE6 不支持 &#8220;a&#8221; 元素之外的其他元素的 hover 伪类，这个可以通过一些复杂的 CSS Hack 来进行兼容，不过我这里就不管它了，感兴趣的同学可以自行 Google 之。</p>
<p><strong>第三步：</strong> 用 jQuery 来添加我们的旗帜动画效果</p>
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;../js/jquery.easing.1.3.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.flagNav.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>我们将 jQuery 库和 jQuery Easing 插件载入，并载入自己的 <a href="http://paosha.net/demo/flagnav/jquery.flagNav.js" target="_balnk">jQuery flagNav 插件</a>。</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
    $(document).ready(function(){
        $(&quot;#nav1&quot;).flagNav({bgposout:&quot;-261px 0px&quot;, bgposover:&quot;-79px 0px&quot;});
        $(&quot;#nav2&quot;).flagNav({bgposout:&quot;-261px 0px&quot;, bgposover:&quot;-79px 0px&quot;, rollback:true});
    });
&lt;/script&gt;
</pre>
<p>再在页面载入后对我们的菜单进行初始化，其中 flagNav 函数的参数中 bgposout 和 bgposover 的值分别和前面 CSS 中 &#8220;a:link&#8221; 和 &#8220;a:hover&#8221; 的 background-position 值相对应，rollback 参数则表示在菜单消失时是否使用动画效果，默认值是不使用。</p>
<p>这样我们就完成了一个带旗帜动画效果的纵向多级导航菜单，是不是挺简单的？</p>
<p>这个菜单在所有<a href="http://www.paopao.name/browsers">我使用的浏览器</a>上都测试通过了，如果你有任何问题或建议，欢迎给我留言。</p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=141&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/javascript/flag-style-multi-level-vertical-navigation-menu.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>你的第一条饭否/ Twitter 消息</title>
		<link>http://www.paopao.name/programme/javascript/your-first-fanfou-twitter-message.html</link>
		<comments>http://www.paopao.name/programme/javascript/your-first-fanfou-twitter-message.html#comments</comments>
		<pubDate>Mon, 27 Apr 2009 02:59:58 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[饭否]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JSONP]]></category>
		<category><![CDATA[tinyurl]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.paopao.name/fanfou/your-first-fanfou-twitter-message.html</guid>
		<description><![CDATA[前天在饭否上看到有些人在玩一个 Twitter 应用，这个应用可以查出你加入 Twitter 的时间。觉得蛮好玩的，因为我用 Twitter 很少（主要是觉得网页版速度不够快，又不想再开一个客户端），所以... ]]></description>
			<content:encoded><![CDATA[<p>前天在饭否上看到有些人在玩一个<a href="http://whendidyoujointwitter.appspot.com/" target="_blank"> Twitter 应用</a>，这个应用可以查出你加入 Twitter 的时间。觉得蛮好玩的，因为我用 Twitter 很少（主要是觉得网页版速度不够快，又不想再开一个客户端），所以想看看能不能移植到饭否来。虽然<a href="http://code.google.com/p/fanfou-api/wiki/ApiDocumentation" target="_blank">饭否的 API</a> 和 Twitter 的基本相同，但是在用户信息这部分稍有不同，饭否并没有提供用户的创建时间这个字段。</p>
<p>没办法，只好曲线救国了&#8230; 我用了搜索用户消息的办法来查找用户的第一条消息，虽然这和用户的创建时间不一定一样，不过这也算是另一种应用吧 ^_^</p>
<p>第一次使用 <a href="http://code.google.com/appengine/" target="_blank">Google App Engine</a> 来部署应用，不过没用到 Python (因为不会 =,= )，只是直接使用了静态文件：</p>
<p><a href="http://yourfirstfanfoumessage.appspot.com/" target="_blank">你在饭否的第一条消息？</a><br />
<ins datetime="2009-04-28T01:46:47+00:00">不幸的发现饭否的 API 也有同样的限制，虽然没有在文档里写明，但是经过测试，只能得到最多 3,200 条用户消息&#8230;</ins><br />
<ins datetime="2009-04-30T04:04:02+00:00"><strong>Update 了一个新的版本，现在应该可以查询所有人的第一条消息了，即使你是消息数超过 3,200 的饭否狂人 <img src='http://www.paopao.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></ins></p>
<p><a href="http://yourfirsttwitter.appspot.com/" target="_blank">Your First Twitter?</a><br />
<ins datetime="2009-04-27T03:50:20+00:00">Twitter 这个版本有点问题，由于 API 的限制，只能得到最多 3,200 条用户消息，所以消息数超过 3,200 的目前还无法查到第一条消息&#8230;</ins></p>
<blockquote><p>Rest API Limit<br />
Clients may request up to 3,200 statuses via the page and count parameters for timeline REST API methods. </p></blockquote>
<p><a href="http://yourfirsttwitter.appspot.com/search.htm" target="_blank">Your First Twitter? (Search Version)</a><br />
<ins datetime="2009-04-27T13:55:03+00:00">Twitter 消息数超过 3,200 的 Twitter 狂人们可以尝试这个版本，通过 google 搜索来查找的，不一定能成功</ins></p>
<p>另外第一次用到了 <a href="http://www.google.com/search?q=JSONP" target="_blank">JSONP</a> 技术，和 <a href="http://jquery.com/" target="_blank">Jquery</a> 结合起来使用的话，很好很方便。</p>
<p>感谢 James Padolsey 的 <a href="http://james.padolsey.com/javascript/create-a-tinyurl-with-jsonp/" target="_blank">TinyURL JSONP API</a> ，可以很方便的得到缩短网址。</p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=114&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/javascript/your-first-fanfou-twitter-message.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Opera浏览器处理disabled属性的bug</title>
		<link>http://www.paopao.name/programme/webdevelop/opera-browser-to-deal-with-the-disabled-attribute-bug.html</link>
		<comments>http://www.paopao.name/programme/webdevelop/opera-browser-to-deal-with-the-disabled-attribute-bug.html#comments</comments>
		<pubDate>Wed, 26 Nov 2008 13:00:23 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[disabled]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[opera]]></category>

		<guid isPermaLink="false">http://www.paopao.name/computer/opera-browser-to-deal-with-the-disabled-attribute-bug.html</guid>
		<description><![CDATA[最近在看John Resig的《精通JavaScript》，作为JQuery的作者之一，技术实力自然不在话下。不过如果仔细看某些源代码的话，还是有些小问题的，也许是作者比较粗心吧，这里是中文版的勘误页面，... ]]></description>
			<content:encoded><![CDATA[<p>最近在看John Resig的《精通JavaScript》，作为JQuery的作者之一，技术实力自然不在话下。不过如果仔细看某些源代码的话，还是有些小问题的，也许是作者比较粗心吧，这里是<a href="http://realazy.org/jspro/erratra" target="_balnk">中文版的勘误页面</a>，再版的时候估计会好很多。</p>
<p>趁着读书时的热情，做了一些小的demo来练习，在上一个demo中发现opera浏览器在处理xhtml标签的&#8221;disabled&#8221;属性时有一个bug。 </p>
<p>事情是这样的，我在页面中有一个button元素，我希望它只能被点击一次，所以我在button的click事件中将它的&#8221;disabled&#8221;属性置为true。这样，点击一次之后，这个button就变成了灰色的不可用状态，我也确实无法再通过鼠标直接点击它了。事情到此都是没有问题的，接下来我希望能用键盘快捷键来控制这个button，于是我给它添加了&#8221;accesskey&#8221;属性，然后问题就来了，在我点击一次使得button变为不可用状态后，我还是可以通过accesskey来点击它。<br />
我在其他的浏览器上进行了同样的实验，结果表明在我现有的浏览器 (FireFox3, IE8, Safari3/win, Chrome0.4) 上都没有这个bug，除了opera。我目前使用的是opera 9.61版，不过我估计opera以前的版本也存在同样的bug。</p>
<p>进一步实验后，发现opera不只是在处理&#8221;accesskey&#8221;的点击时有bug，而是在处理除了鼠标直接点击之外的所有其他方式时都存在这个bug。比如在另一个JavaScript脚本里调用这个已经被禁用的button的click函数，甚至通过tab获取button焦点之后连续点击回车，都可以绕过button的disabled属性而触发它的click事件。</p>
<p>我写了一个demo页面来演示这个bug：<a href="http://www.paosha.net/demo/single/button.htm" target="_balnk">Button &amp; accesskey</a></p>
<p>还有要注意的一点就是accesskey在不同的浏览器中的使用方法并不一样。Opera中是通过shift+esc调出accesskey菜单再按相应的accesskey，IE8、Safari3/win以及Chrome0.4则都是使用alt+accesskey。FireFox3中则默认是alt+shift+accesskey，这避免了与浏览器菜单快捷键的冲突，不过可以通过修改about:config的ui.key.contentAccess键值来更改，这个<a href="http://www.genmous.cn/blog/article/31.htm" target="_balnk">键值的具体含义</a>如下：</p>
<ul>
<li>1 = Shift</li>
<li>2 = Ctrl</li>
<li>3 = Shift + Ctrl</li>
<li>4 = Alt</li>
<li>5 = Shift + Alt</li>
<li>6 = Alt + Ctrl</li>
<li>7 = Ctrl + Shift + Alt</li>
</ul>
<p>另外，在做这个demo的时候还发现了IE在处理button按钮时和其他浏览器的不同。在JavaScript脚本中通过element.value来获取button的value属性的值，在IE中得到的是button的innerHTML值，而在其他浏览器中得到的是正确的value属性的值。在网上搜了一下，这个问题有不少人问，解决办法也有不少，有的人建议改用input标签，不过我觉得不符合语义化的要求。还有通过Javascript和xml来解决的，感觉太麻烦了。最后我决定使用button的title属性来存储我需要的值，没办法，妥协一下吧。</p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=111&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/webdevelop/opera-browser-to-deal-with-the-disabled-attribute-bug.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FlashFXP站点文件与FileZilla站点文件的互转</title>
		<link>http://www.paopao.name/programme/flashfxp-site-files-and-file-conversion-site-filezilla.html</link>
		<comments>http://www.paopao.name/programme/flashfxp-site-files-and-file-conversion-site-filezilla.html#comments</comments>
		<pubDate>Wed, 19 Nov 2008 16:42:23 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[FileZilla]]></category>
		<category><![CDATA[FlashFXP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.paopao.name/computer/flashfxp-site-files-and-file-conversion-site-filezilla.html</guid>
		<description><![CDATA[FlashFXP是windows下常用也是很流行的一款ftp下载软件，不过它是收费软件，很多人用的应该都是它的盗版产品吧。
FileZilla则是一款开源的ftp下载软件，对于普通的ftp下载来说完全可以代替FlashFXP... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flashfxp.com/" target="_blank">FlashFXP</a>是windows下常用也是很流行的一款ftp下载软件，不过它是收费软件，很多人用的应该都是它的盗版产品吧。</p>
<p><a href="http://filezilla-project.org/" target="_blank">FileZilla</a>则是一款开源的ftp下载软件，对于普通的ftp下载来说完全可以代替FlashFXP来使用，而且FileZilla可以跨平台并且支持IPv6的站点下载。</p>
<p>对于想从FlashFXP迁移到FileZilla的用户来说，站点列表的迁移是个主要的问题。FlashFXP没有提供站点文件导出的功能，不过它的站点文件是保存在安装目录的Sites.dat文件中的，可以很容易找到。FileZilla则提供了完善的导入和导出功能，而且支持的格式是开放的xml格式。</p>
<p>前几天在<a href="http://bbs.sjtu.edu.cn/" target="_blank">水源</a>上有人问这两个站点转换的方法，搜到一个CCF的附件，不过没法下载。所以在网上找了些资料，用php写了一个。其中主要的麻烦在于FlashFXP站点文件的格式解析，还有两种站点文件的密码加解密。不过好在已经<a href="http://gzllm.itpub.net/post/345/48980" target="_blank">有人研究过</a>了，只要参考他们的写一个php版本的就行了。</p>
<p><strong>在线转换地址</strong>：<br />
<a href="http://www.paosha.net/demo/ff2fz/" target="_blank">FlashFXP V3.0站点文件 <=> FileZilla V2.x、V3.x站点文件</a></p>
<p>写这个在线版的时候顺便学习使用了一下<a href="http://www.blueprintcss.org/" target="_blank">Blueprint CSS Framework</a>，很方便 ^_^</p>
<p>如果担心自己的站点密码安全性，可以用下面这个CLI版本的，不过需要先安装PHP 5.0以上的版本。<br />
<strong>CLI版</strong>：<br />
<a href='http://www.paopao.name/wp-content/uploads/2008/11/ff2fz_cli.zip' title='FlashFXP2FileZilla_CLI'>FlashFXP2FileZilla CLI版</a></p>
<p>目前这个转换程序已经实现站点基本信息以及注释的相互转换，其他的一些诸如PASV模式之类的设置没有去考虑，转换之后是默认的设置。另外在FlashFXP转到FileZilla时，将站点的默认连接数设置成了1，这样对于很多只能1 connection/ip的站点就不会有问题了。</p>
<p>如果发现什么bug或者有什么意见可以直接留言给我 <img src='http://www.paopao.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=109&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/flashfxp-site-files-and-file-conversion-site-filezilla.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Opera 9.5 rocks</title>
		<link>http://www.paopao.name/web/opera-95-rocks.html</link>
		<comments>http://www.paopao.name/web/opera-95-rocks.html#comments</comments>
		<pubDate>Thu, 12 Jun 2008 09:57:23 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[Opera 9.5]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://www.paopao.name/computer/opera-95-rocks.html</guid>
		<description><![CDATA[千等万等终于等来了Opera 9.5正式版的发布，第一时间装上体验。

首先的是默认皮肤有了很大的改变，用惯了以前版本的会突然感觉很不适应。而且左边侧边栏的打开/关闭按钮跑到标签栏边上... ]]></description>
			<content:encoded><![CDATA[<p>千等万等终于等来了Opera 9.5正式版的发布，第一时间装上体验。</p>
<p><a title="Opera 9.5 snapshot" href="http://www.yupoo.com/photos/view?id=ff8080811a7531bd011a7c26340b05ff&amp;album=ff8080811a7531bd011a7c25e2b505e4" target="_blank"><img src="http://pic.yupoo.com/wuxipaopao/578915b46528/medium.jpg" width="500" height="355" /></a></p>
<p>首先的是默认皮肤有了很大的改变，用惯了以前版本的会突然感觉很不适应。而且左边侧边栏的打开/关闭按钮跑到标签栏边上去了，害得我还是习惯性的去点左边缘，然后发现什么反应都没有&#8230;</p>
<p>然后最大的感觉就是速度确实又提升了不少，不过对我来说最大的好处则是兼容性更好了。Opera 9.25最让我困扰的问题就是不能正确的浏览space空间和在space及新浪blog留言，因为我有不少朋友是用的space和新浪blog作为bsp，导致我每次想要留言的时候都得换浏览器，现在Opera 9.5解决了这两个问题，非常禶，这样就基本不用换浏览器了。</p>
<p>最后Opera 9.5还有一个新东西就是Opera Dragonfly，一个开发者工具，不过我到现在还没Loading完，不知道啥时候才能看到&#8230;</p>
<p>以下是下载地址：</p>
<p>[仅英文版]：<br />
<a href="http://ftp.opera.com/pub/opera/win/950/en/Opera_950_classic_Setup.exe">http://ftp.opera.com/pub/opera/win/950/en/Opera_950_classic_Setup.exe</a></p>
<p>Windows MSI [国际版]：<br />
<a href="http://ftp.opera.com/pub/opera/win/950/int/Opera_950_in_Setup.exe">http://ftp.opera.com/pub/opera/win/950/int/Opera_950_in_Setup.exe</a></p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=107&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/web/opera-95-rocks.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>IE 7 修复的 CSS 相关 bug</title>
		<link>http://www.paopao.name/programme/webdevelop/ie7-fixed-css-bugs.html</link>
		<comments>http://www.paopao.name/programme/webdevelop/ie7-fixed-css-bugs.html#comments</comments>
		<pubDate>Tue, 23 Oct 2007 14:08:07 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ie7]]></category>

		<guid isPermaLink="false">http://www.paopao.name/?p=91</guid>
		<description><![CDATA[最近在看《精通 CSS 高级 Web 标准解决方案》这本书，里面的第9章是关于 bug 和 bug 的修复的。由于作者在写这本书的时候 IE 7 还没有推出，所以里面列举的都是 IE 6 和更低版本的几个 bug。现在 ... ]]></description>
			<content:encoded><![CDATA[<p>最近在看《精通 CSS 高级 Web 标准解决方案》这本书，里面的第9章是关于 bug 和 bug 的修复的。由于作者在写这本书的时候 IE 7 还没有推出，所以里面列举的都是 IE 6 和更低版本的几个 bug。现在 IE 7 已经推出蛮久了，占有率也达到了<a HREF="http://www.thecounter.com/stats/2007/October/browser.php" TARGET="_blank" TITLE="Browser Stats">24%</a>，仅次于 IE 6，而且据称修复了不少 bug，我就实地测试了一下书中提到的几个常见 bug，由于我的机子上装的是 IE 7，所以还特地去下了一个 IE 6 绿色版。同时附上我最常用的 Opera 浏览器的测试结果做比较。</p>
<p>1、双空白边浮动 bug</p>
<p><a HREF="http://photo11.yupoo.com/20071023/073610_1443924357_eznpwnei.jpg" TARGET="_blank" TITLE="点击看大图"><img SRC="http://photo11.yupoo.com/20071023/073610_1443924357.jpg" ALT="双空白边浮动 bug" TITLE="双空白边浮动 bug" WIDTH="500" HEIGHT="115" STYLE="width: 500px; height: 115px" /></a></p>
<p>测试结果：已修复</p>
<p>2、3像素文本偏移 bug</p>
<p><a HREF="http://photo11.yupoo.com/20071023/073609_659679476_dbwlabzk.jpg" TARGET="_blank" TITLE="点击看大图"><img SRC="http://photo11.yupoo.com/20071023/073609_659679476.jpg" ALT="3像素文本偏移 bug" TITLE="3像素文本偏移 bug" WIDTH="500" HEIGHT="116" STYLE="width: 500px; height: 116px" /></a></p>
<p>测试结果：已修复</p>
<p>3、IE 6 重复字符 bug</p>
<p><a TITLE="点击看原图" TARGET="_blank" HREF="http://photo11.yupoo.com/20071023/073610_1861645978_seahtwzt.jpg"><img STYLE="width: 500px; height: 267px" HEIGHT="267" WIDTH="500" TITLE="IE 6 重复字符 bug" ALT="IE 6 重复字符 bug" SRC="http://photo11.yupoo.com/20071023/073610_1861645978.jpg" /></a></p>
<p>测试结果：未修复</p>
<p>4、<a TITLE="Explorer 6 Duplicate Characters Bug" TARGET="_blank" HREF="http://www.positioniseverything.net/explorer/dup-characters.html">IE 6 躲猫猫 bug</a></p>
<p><a TITLE="点击看大图" TARGET="_blank" HREF="http://photo11.yupoo.com/20071023/073611_1106805970_ujnersng.jpg"><img STYLE="width: 500px; height: 121px" HEIGHT="121" WIDTH="500" TITLE="IE 6 躲猫猫 bug" ALT="IE 6 躲猫猫 bug" SRC="http://photo11.yupoo.com/20071023/073611_1106805970.jpg" /></a><br />
测试结果：已修复</p>
<p>5、相对容器中的绝对定位</p>
<p><a TITLE="点击看大图" TARGET="_blank" HREF="http://photo11.yupoo.com/20071023/073611_2138923778_ejqdjhea.jpg"><img STYLE="width: 500px; height: 201px" HEIGHT="201" WIDTH="500" TITLE="相对容器中的绝对定位" ALT="相对容器中的绝对定位" SRC="http://photo11.yupoo.com/20071023/073611_2138923778.jpg" /></a></p>
<p>测试结果：已修复</p>
<p>关于 IE 7 修复的其他 bug 列表可以看看<a TITLE="再见了Peekaboo/Guillotine" TARGET="_blank" HREF="http://www.osxcn.com/css/peekaboo-guillotine.html">这里</a>。</p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=91&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/webdevelop/ie7-fixed-css-bugs.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>从Apache2.0.54到Apache2.2.3</title>
		<link>http://www.paopao.name/programme/apache2-to-apache2-2.html</link>
		<comments>http://www.paopao.name/programme/apache2-to-apache2-2.html#comments</comments>
		<pubDate>Thu, 07 Sep 2006 05:21:00 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://paopao.yiblog.com/index.php/2006/09/07/apache2054apache223/</guid>
		<description><![CDATA[     机子上的Apache已经装了很长时间了，是2.0.54版的，安装配置好后就一直没去动它。昨天心血来潮去Apache主页上逛了一下，发现已经有Apache 2.2.3了。看了一下2.2版有不少新特性，不过对我... ]]></description>
			<content:encoded><![CDATA[<p>     机子上的Apache已经装了很长时间了，是2.0.54版的，安装配置好后就一直没去动它。昨天心血来潮去Apache主页上逛了一下，发现已经有Apache 2.2.3了。看了一下2.2版有不少新特性，不过对我比较有用的大概只有一个关于mod_rewrite的重要安全补丁，最近学习的Joomla正好使用了这个功能，所以决定升级一下。</p>
<p>Apache 2.2系列是一个新的stable brach，所以安装前先要卸载原来的2.0.54版，卸载之前我先备份了配置文件。</p>
<p>然后就是安装Apache 2.2.3，我安装到了原来那个目录下。安装完之后我先试着把2.0版的配置文件放到conf文件夹下，结果无法启动。看来是不能直接使用原来的httpd.conf文件。</p>
<p>我发现2.2.3版的conf文件夹下除了httpd.conf文件外还多了default和extra两个文件夹，仔细看看后才知道2.2版已经把httpd.conf文件拆分开来了，除了主要的配置信息还保留在httpd.conf外都分成了一个个httpd-xxx.conf放在extra文件夹下，然后在httpd.conf文件中通过include包含进来，这样提供了更多的选择性和便利性。</p>
<p>刚才无法启动Apache的主要原因应该是一些module load不正确，2.2和2.0的modules相差比较大，所以我就拿2.2.3的默认的httpd.conf参照2.0的来修改了，至于那些httpd-xxx.conf文件我按照自己的需求选择了一部分include了，不过要注意在httpd-xxx.conf文件中需求的modules必须在httpd.conf中load正确，否则也会无法启动。</p>
<p>经过一番折腾，配置文件都修改好了，Apache也正常启动了。打开opera测试一下，发现静态网页可以正常浏览，但是php文件都直接显示的源码。我明明load了php5_module了，Apache也可以启动了，其他相应设置也写了，奇怪。</p>
<p>上网google了一把，发现不是只有我有这个问题，原来PHP5压缩包里的php5apache2.dll只适用于apache2.0.*</p>
<p>解决方法:<br />
下载<a HREF="http://www.apachelounge.com/download/mods/php5apache2.dll-php5.1.x.zip">http://www.apachelounge.com/download/mods/php5apache2.dll-php5.1.x.zip</a>这个补丁并解压,共有三个文件：<br />
vcredist_x86.exe<br />
php5apache2.dll<br />
httpd.exe.manifest</p>
<p>1.将php5apache2.dll拷贝到PHP5的根目录下覆盖原来的文件；<br />
2.将httpd.exe.manifest文件复制到apache2.2.3安装目录下的bin文件夹下；<br />
3.双击运行vcredist_x86.exe安装(如果系统里已安装了.NET framework 2，就可以省掉这一步)。</p>
<p>我的机子已经安装了.NET framework 2，完成以上两步后重启Apache，可以正常解析PHP文件了。</p>
<p>升级完成 ^_^</p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=10&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/apache2-to-apache2-2.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>YSSY Signature</title>
		<link>http://www.paopao.name/programme/webdevelop/yssy-signature.html</link>
		<comments>http://www.paopao.name/programme/webdevelop/yssy-signature.html#comments</comments>
		<pubDate>Sat, 20 May 2006 04:48:00 +0000</pubDate>
		<dc:creator>paopao</dc:creator>
				<category><![CDATA[WebDevelop]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[signature]]></category>
		<category><![CDATA[yssy]]></category>

		<guid isPermaLink="false">http://paopao.yiblog.com/index.php/2006/05/20/yssy-signature/</guid>
		<description><![CDATA[     前段时间弄了个Gmail的signature，是为了防止spider抓网页上你的邮箱地址的，觉得蛮漂亮的。

今天看了一下php的Image图像函数(需要GD 库支持)，自己仿照着做了一个YSSY的Signature，当然源图... ]]></description>
			<content:encoded><![CDATA[<p>     前段时间弄了个Gmail的signature，是为了防止spider抓网页上你的邮箱地址的，觉得蛮漂亮的。</p>
<p><img SRC="http://services.nexodyne.com/email/icon/nBjVZRBd1JiClg%3D%3D/2lmjRpQ%3D/R01haWw%3D/0/image.png" ALT="Gmail Signature" /></p>
<p>今天看了一下php的Image图像函数(需要GD 库支持)，自己仿照着做了一个YSSY的Signature，当然源图片是直接从水源的主页上面的logo处理而来的，在这里对图片作者表示感谢，不要找我要版权费啊。。。^_^</p>
<p><img SRC="http://bbs.sjtu.edu.cn/file/test/1148115907148400.png" ALT="luncheomeat_YSSY1" /></p>
<p><img SRC="http://bbs.sjtu.edu.cn/file/test/1148115952158270.png" ALT="luncheomeat_YSSY2" /></p>
<p><img SRC="http://bbs.sjtu.edu.cn/file/test/1148115966145360.png" ALT="luncheomeat_YSSY3" /></p>
<p>原来是准备做成png格式的，结果做好后发现水源好像不支持png格式的直接显示，就又改成jpg格式的了。</p>
<p><img SRC="http://bbs.sjtu.edu.cn/file/test/1148117335145221.jpg" ALT="luncheomeat_YSSY1" /></p>
<p><img SRC="http://bbs.sjtu.edu.cn/file/test/1148117352162380.jpg" ALT="luncheomeat_YSSY2" /></p>
<p><img SRC="http://bbs.sjtu.edu.cn/file/test/1148117368145361.jpg" ALT="luncheomeat_YSSY3" /></p>
<p>可以去我的网站生成你自己的哦^_^ (我开机的时候才可以登录=,=)</p>
<p><a HREF="http://paopao.ftpun.com/test/YSSY_logo/">http://paopao.ftpun.com/test/YSSY_logo/</a></p>
<img src="http://www.paopao.name/?ak_action=api_record_view&id=18&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.paopao.name/programme/webdevelop/yssy-signature.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
