<?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>影の域 &#187; 开发编程</title>
	<atom:link href="http://www.zfkun.com/index.php/category/code/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zfkun.com</link>
	<description>关注web前端,追逐html5脚步,体会code人生</description>
	<lastBuildDate>Tue, 06 Dec 2011 06:45:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Path UI by CSS3</title>
		<link>http://www.zfkun.com/454.html</link>
		<comments>http://www.zfkun.com/454.html#comments</comments>
		<pubDate>Tue, 06 Dec 2011 06:44:20 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/?p=454</guid>
		<description><![CDATA[Path的UI惊起哇声一片，最大的亮点无疑是左下角的菜单展开效果。于是有各个版本的仿Path菜单出现，比如我们之前报道过的国内某牛人的作品，这里还有若干个关于Path菜单的讨论。但最引人注意的还是来自法国小伙Victor的作品：用纯CSS3制作的Path菜单效果。

他说他喜欢Path的新界面，尤其是添加菜单，作为一个前端设计师的他打算在浏览器里实现同样的效果。 <a href="http://www.zfkun.com/454.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Path的UI惊起哇声一片，最大的亮点无疑是左下角的菜单展开效果。于是有各个版本的仿Path菜单出现，比如我们之前报道过的<a title="新版Path的漂亮菜单UI已被开源" href="http://www.36kr.com/p/64382.html">国内某牛人的作品</a>，这里还有若干个<a href="http://www.v2ex.com/t/22743" rel="external nofollow" target="_blank">关于Path菜单的讨论</a>。但最引人注意的还是来自法国小伙<a href="https://twitter.com/#!/_victa" rel="external nofollow" target="_blank">Victor</a>的作品：用纯CSS3制作的Path菜单效果。</p>
<p>他说他喜欢Path的新界面，尤其是添加菜单，作为一个前端设计师的他打算在浏览器里实现同样的效果。以下是他制作的一段视频：</p>
<p><object width="480" height="400" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://player.youku.com/player.php/sid/XMzI5MjI5OTky/v.swf" /><param name="quality" value="high" /><param name="allowscriptaccess" value="sameDomain" /><param name="allowfullscreen" value="true" /><embed width="480" height="400" type="application/x-shockwave-flash" src="http://player.youku.com/player.php/sid/XMzI5MjI5OTky/v.swf" quality="high" allowscriptaccess="sameDomain" allowfullscreen="true" /></object></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>整个作品通过html/css3完成，没有使用任何图片，没有任何javascript。因此仅支持Webkit浏览器。Victor通过Sass+Compass计算每个图标的坐标，并生成了动画效果。你不用重写代码就可以添加或删除项目。</p>
<p>实际效果请移步至<a href="http://lab.victorcoulon.fr/css/path-menu/" rel="external nofollow" target="_blank">这里</a>，你可以在github上找到<a href="https://github.com/victa/path-menu" rel="external nofollow" target="_blank">这段源代码</a>。</p>
<p>&nbsp;</p>
<p>本文转载来自<a title="用纯CSS3做成的Path菜单效果" href="http://www.36kr.com/p/65100.html" rel="bookmark">36氪</a></p>

	标签：<a href="http://www.zfkun.com/tag/android" title="android" rel="tag">android</a>, <a href="http://www.zfkun.com/tag/css3" title="css3" rel="tag">css3</a>, <a href="http://www.zfkun.com/tag/iphone" title="iphone" rel="tag">iphone</a>, <a href="http://www.zfkun.com/tag/path" title="path" rel="tag">path</a>, <a href="http://www.zfkun.com/tag/ui" title="ui" rel="tag">ui</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/445.html" title="移动 Web 开发平台 Rexsee 开源 (2011 年 10 月 28 日)" data-comment="0">移动 Web 开发平台 Rexsee 开源</a></li>
	<li><a href="http://www.zfkun.com/366.html" title="Market Enabler &#8211; Android越狱改区利器 (2011 年 07 月 10 日)" data-comment="2">Market Enabler &#8211; Android越狱改区利器</a></li>
	<li><a href="http://www.zfkun.com/html5" title="HTML5 (2011 年 06 月 03 日)" data-comment="0">HTML5</a></li>
	<li><a href="http://www.zfkun.com/377.html" title="Google+ for Android 安装 (2011 年 07 月 10 日)" data-comment="0">Google+ for Android 安装</a></li>
	<li><a href="http://www.zfkun.com/372.html" title="apk文件的MIME类型 (2011 年 07 月 10 日)" data-comment="0">apk文件的MIME类型</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/454.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>移动 Web 开发平台 Rexsee 开源</title>
		<link>http://www.zfkun.com/445.html</link>
		<comments>http://www.zfkun.com/445.html#comments</comments>
		<pubDate>Fri, 28 Oct 2011 09:30:04 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[Rexsee]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/?p=445</guid>
		<description><![CDATA[国内移动Web开发平台Rexsee正式开源，其开发者社区也于本周上线。访问社区可以查看详细开发手册、API说明与示例以及全部源码，并可在线编译免费生成移动应用客户端。 <a href="http://www.zfkun.com/445.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>国内移动Web开发平台Rexsee正式开源，其开发者社区也于本周上线。访问社区可以查看详细开发手册、API说明与示例以及全部源码，并可在线编译免费生成移动应用客户端。</em></p>
<p>伴随着HTML5的发展以及Web App的广受认可，基于Web的移动应用开发已经受到了技术厂商与开发者的普遍关注。大量的Web框架纷纷转投移动应用领域，近期反响最大的无疑是由 ExtJS、jQTouch 以及 Raphael合并而成的Sencha，以及被Adobe收购的PhoneGap。Mozilla也于上月宣布计划构建 WebAPI，用于在浏览器中调用移动设备功能。</p>
<p>基于类似的技术理念，国内的Rexsee团队已提供了整体的移动应用“开发平台”，并于今年5月开始面向企业级应用市场推广。</p>
<p>Rexsee产品以Webkit为内核，全面支持HTML5。通过扩展超过1500个API，以Javascript实现对移动终端的功能调用，强化HTML5在浏览器之外的移动终端功能实现。开发者可以使用HTML、CSS和Javascript快速实现移动应用，并通过原生化应用转换功能，直接生成应用程序。</p>
<p>不同于国际范围的其他移动Web开发框架，Rexsee并不过度追求跨平台特性。在深度支持Android原生功能的前提下，采用全部同步的开发方式，并在执行效率上有显著提升。</p>
<p>Rexsee的开源策略旨在让更多的开发人员可以迅速的进入到移动互联网领域，基于标准化的Web开发方式快速实现移动应用。结合之前所积累的大量应用，Rexsee开发者社区在上线第一天，就已有246个应用得以审核推出，并且还在持续增加。</p>
<p>作为国内唯一开源的移动Web开发平台，Rexsee定位于服务移动应用开发者的技术平台提供方，力图为移动应用创新发展打造更加广泛坚实的开发者基础。</p>
<p>&nbsp;</p>
<p>原文： <a href="http://www.oschina.net/news/22624/raxsee-opensource">http://www.oschina.net/news/22624/raxsee-opensource</a></p>

	标签：<a href="http://www.zfkun.com/tag/android" title="android" rel="tag">android</a>, <a href="http://www.zfkun.com/tag/ios" title="ios" rel="tag">ios</a>, <a href="http://www.zfkun.com/tag/open" title="open" rel="tag">open</a>, <a href="http://www.zfkun.com/tag/rexsee" title="Rexsee" rel="tag">Rexsee</a>, <a href="http://www.zfkun.com/tag/source" title="source" rel="tag">source</a>, <a href="http://www.zfkun.com/tag/web-2" title="web" rel="tag">web</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/388.html" title="window.open() 之句柄保持和重连 (2011 年 07 月 14 日)" data-comment="0">window.open() 之句柄保持和重连</a></li>
	<li><a href="http://www.zfkun.com/454.html" title="Path UI by CSS3 (2011 年 12 月 06 日)" data-comment="0">Path UI by CSS3</a></li>
	<li><a href="http://www.zfkun.com/366.html" title="Market Enabler &#8211; Android越狱改区利器 (2011 年 07 月 10 日)" data-comment="2">Market Enabler &#8211; Android越狱改区利器</a></li>
	<li><a href="http://www.zfkun.com/377.html" title="Google+ for Android 安装 (2011 年 07 月 10 日)" data-comment="0">Google+ for Android 安装</a></li>
	<li><a href="http://www.zfkun.com/372.html" title="apk文件的MIME类型 (2011 年 07 月 10 日)" data-comment="0">apk文件的MIME类型</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/445.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Rewrite SEO 之404方式折腾笔记</title>
		<link>http://www.zfkun.com/417.html</link>
		<comments>http://www.zfkun.com/417.html#comments</comments>
		<pubDate>Sun, 17 Jul 2011 10:10:57 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/?p=417</guid>
		<description><![CDATA[    WordPress 是多么强大的Blog（甚至可以说CMS）系统就不用多说了。说到底我把WP只看做一个开发起步的框架而已，更多的性能及功能的挖掘和利用还是需要自己去完成。
    最近折腾 HTML5探索 的SEO时，想起来我的博客依旧还没做过SEO，遂就开始了下面记录中的折腾回忆录。
    空间是虚拟主机（还是WIN + IIS）、无Rewrite、无子域名等等，在诸多的不利因素下，对于强大的WordPress来说，依旧能找到较好的优化方式: 404 Rewrite。SO, 就开始大面积的调整程序 + hack, 终于算完成了现在的Rewrite，真是累死我也。（做了一大堆复杂的兼容工作，历史原因害死人呀！） <a href="http://www.zfkun.com/417.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WordPress 是多么强大的Blog（甚至可以说CMS）系统就不用多说了。说到底我把WP只看做一个开发起步的框架而已，更多的性能及功能的挖掘和利用还是需要自己去完成。<br />
最近折腾 <a title="HTML5探索" href="http://html5.so" target="_blank">HTML5探索</a> 的SEO时，想起来我的博客依旧还没做过SEO，遂就开始了下面记录中的折腾回忆录。<br />
空间是虚拟主机（还是WIN + IIS）、无Rewrite、无子域名等等，在诸多的不利因素下，对于强大的WordPress来说，依旧能找到较好的优化方式: 404 Rewrite<br />
so, 就开始大面积的调整程序 + hack 终于算完成了现在的Rewrite，真是累死我也。（做了一大堆复杂的兼容工作，历史原因害死人呀！）<br />
经过亲身体验，需要提醒下使用 404 Rewrite 前要明确站点是否为新建站点，若是，一切很easy，若不是，就有了我下面的那么多兼容工作要做，悲催！！<br />
正常的对于新建站点（404支持设置为php页面前提），因为站点较新搜索引擎还未开始收录，对外分享也几乎为0。所以需要做的就相对很少，编写好404.php的处理代码，后台做好配置即可。<br />
而有时候（其实就是我现在啦- -）, 站点运行很长时间（几年了），期间经历过无数的配置调整（还有数据丢失，我擦！），对于各种URL已经产生了很多种版本，所以需要做的工作就非常多了。<br />
由于已经过了2天了，具体顺序都不清楚了，这里仅做下回忆录式笔记，以防以后不备之需（身在天朝，谁知哪天又天灾人祸呀！）：</p>
<h3>涉及文件修改列表：</h3>
<blockquote><p>/404.php     /index.php     /blog/index.php</p></blockquote>
<h3>修改回忆录：</h3>
<p>1. /blog/index.php -&gt; /blog/index.php.bak 说白了就是备份<br />
2. 新建 /blog/index.php, 编写一些兼容处理代码:</p>
<pre name="code" class="php">&lt;?php
// zfkun.com to www.zfkun.com
if ( $_SERVER["HTTP_HOST"] === "zfkun.com") {
doRedirect("http://www.");
} else {

// 对所有原有效URL规则做301永久重定向，从而兼容原旧历史路径
$_qu = str_replace('/blog/index.php', '', $_SERVER['REQUEST_URI']);
$_SERVER["REQUEST_URI"] = (empty($_qu) || $_qu == "") ? '/' : $_qu;
doRedirect();
}

function doRedirect($prefix = "http://") {
header( "HTTP/1.1 301 Moved Permanently" );
header("Location: " . $prefix . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] );
}
?&gt;</pre>
<p>3. cp /blog/index.php.bak /index.php, 然后增加兼容处理:</p>
<pre name="code" class="php">&lt;?php
    // zfkun.com to www.zfkun.com
    if ( $_SERVER["HTTP_HOST"] === "zfkun.com" ) {
    header( "HTTP/1.1 301 Moved Permanently" );
    header("Location: " . "http://www." . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] );
    exit;
} else {

	/**
	 * 对 /index.php/archives/* 形式URL做下过滤(历史原因)
	 *    增加对一些特殊路径的兼容纠错,如：
	 *        http://www.zfkun.com/index.php/archives/category/code/javascript
	 *        http://www.zfkun.com/index.php/archives/tag/javascript
	 *        http://www.zfkun.com/index.php/archives/205.html
	 */
	if (strpos($_SERVER['REQUEST_URI'], '/index.php') === 0) {
		$_qu = str_replace( '/archives', '', str_replace('/index.php', '', $_SERVER['REQUEST_URI']) );
		if (!empty($_qu)) {
                    // 修正对 /index.php/archives/239 此类地址解析时忘记补充 .html 造成的BUG
		    if (strpos($_qu, '.html') === false) {
		        // '/205' =&gt; '/205.html'
		         $_qu = preg_replace('/^\/(\d+)/', '$0.html', $_qu);
		    }
		    $_SERVER['PATH_INFO'] = $_SERVER["REQUEST_URI"] = $_qu;
		}
	}
}

// 解决 WordPress的中文路径在WIN + IIS 下的解析错误问题
$_SERVER['PATH_INFO'] = mb_convert_encoding($_SERVER['PATH_INFO'],"UTF-8","GBK");
$_SERVER['REQUEST_URI'] = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");
.....
?&gt;</pre>
<p>4. 新建 /404.php 并设置虚拟主机404错误跳转至它，代码摘要：</p>
<pre name="code" class="php">&lt;?php
/**
 * 重置 $_SERVER['REQUEST_URI'] 为期望访问的值
 * 如：
 *    当前访问  http://www.zfkun.com/date/2010/01 ,
 *    则 404 跳转来的 $_SERVER['QUERY_STRING'] === '404;http://www.zfkun.com:80/date/2010/01'
 */
$_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80') + 3);

// blog rule 标志位
$isBlogRule = false;

if (strpos($_SERVER['REQUEST_URI'], '/blog') === 0) {
    $_SERVER['REQUEST_URI'] = substr($_SERVER['REQUEST_URI'], 5);
    $isBlogRule = true;
}

if ($isBlogRule) {
    $_SERVER['REQUEST_URI'] = str_replace('/index.php', '', $_SERVER['REQUEST_URI']);

   /**
    *    /blog/archives/205
    *    /blog/archives/tag/php
    *    /blog/tag/php
    *    /blog/archives/category/code/php
    *    /blog/category/code/php
    */
   if (strpos($_SERVER['REQUEST_URI'], '/archives/') === 0) {
       $_SERVER['REQUEST_URI'] = str_replace('/archives/', '/', $_SERVER['REQUEST_URI']);
   }

    /**
     *  对非静态化后缀的形式进行过滤检测:
     *     可能为: '/blog/205'
     */
    if (strpos($_SERVER['REQUEST_URI'], '.html') === false) {
        // '/205' =&gt; '/205.html'
        $_SERVER['REQUEST_URI'] = preg_replace('/^\/(\d+)/', '$0.html', $_SERVER['REQUEST_URI']);
    }

   /**
    * 检测 queryString 和 hash， 非空需特殊处理
    */
    if (strpos($_SERVER['REQUEST_URI'], '?') === 0 || strpos($_SERVER['REQUEST_URI'], '#') === 0) {
        $_SERVER['REQUEST_URI'] = '/index.php' . $_SERVER['REQUEST_URI'];
        $_SERVER['PATH_INFO'] = '';
    } else {
        $_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'];
    }

    /**
     * 修正因 404 带来的 wordpress内置分页算法的链接错误问题
     * 比如:
     *   访问 http://www.zfkun.com/date/2010/01 时，上一页本来期望是http://www.zfkun.com/date/2010/01/page/2
     *   而实际，因为使用的404 rewrite技术，上一页链接却成了http://www.zfkun.com:80;/date/2010/01/page/3
     *   这是因为wp内置的分页算法直接使用了 $_SERVER['QUERY_STRING'] 和 $_SERVER["SCRIPT_NAME"] 来生成链接地址，
     *   当前因为是404状态下，所以 $_SERVER['QUERY_STRING'] = '404;http://www.zfkun.com:80/date/2010/01';
     * 注意:
     *   仅修改 $_SERVER['QUERY_STRING'] = '' 的话，并解决不了问题，因为当前执行脚本文件为/404.php 从而会导致
     *   生成的链接到  http://www.zfkun.com/404.php/date/2010/01 上去
     *   所以，必须还要重置 $_SERVER['SCRIPT_NAME'] = '/index.php' 从而让WP内置处理逻辑运行正常
     */
    $_SERVER['QUERY_STRING'] = '';
    $_SERVER["SCRIPT_NAME"] = '/index.php';

    // 启动博客主程序
...
} else {
// 真正的 404 处理
...
}
?&gt;</pre>
<p>5. 必须地，后台-&gt;固定链接-&gt;自定义结构 更新值为 /%post_id%.html<br />
这里又发现一个让我很郁闷的问题，若自定义结构使用的形如 /archives/%post_id%.html 或之前的 /index.php/archives/%post_id%<br />
则， 分类 和 标签的 路由默认也会增加这个前缀 /archives/tag/* /archives/category/* 擦，之前历史遗留的2种兼容结构，就是因为这个问题导致的，无奈。</p>
<p>6. 其余的乱七八糟的兼容，模糊了，回头想起来补记下</p>
<p>其实，做的工作远比现在记录的要多，只是让我印象深刻（那是好听的，其实我想说恶心的）的是这些。回头有时间继续更新好了。今天就先到这。</p>

	标签：<a href="http://www.zfkun.com/tag/404" title="404" rel="tag">404</a>, <a href="http://www.zfkun.com/tag/hack" title="hack" rel="tag">hack</a>, <a href="http://www.zfkun.com/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.zfkun.com/tag/rewrite" title="rewrite" rel="tag">rewrite</a>, <a href="http://www.zfkun.com/tag/seo" title="seo" rel="tag">seo</a>, <a href="http://www.zfkun.com/tag/wordpress" title="wordpress" rel="tag">wordpress</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/344.html" title="WordPress 中文Tag 显示404错误的BUG修正 (2011 年 07 月 07 日)" data-comment="0">WordPress 中文Tag 显示404错误的BUG修正</a></li>
	<li><a href="http://www.zfkun.com/135.html" title="挑战 hax.tor.hu 申请带ssh的免费php+mysql空间 (2010 年 03 月 19 日)" data-comment="0">挑战 hax.tor.hu 申请带ssh的免费php+mysql空间</a></li>
	<li><a href="http://www.zfkun.com/39.html" title="基于OpenCV的PHP图像人脸识别技术 (2010 年 01 月 16 日)" data-comment="0">基于OpenCV的PHP图像人脸识别技术</a></li>
	<li><a href="http://www.zfkun.com/223.html" title="动态生成windows快捷方式文件 (2011 年 04 月 02 日)" data-comment="0">动态生成windows快捷方式文件</a></li>
	<li><a href="http://www.zfkun.com/74.html" title="wp_list_categories()参数说明 (2010 年 01 月 18 日)" data-comment="0">wp_list_categories()参数说明</a></li>
	<li><a href="http://www.zfkun.com/179.html" title="WordPress 3.1升级后无法访问 (2011 年 03 月 20 日)" data-comment="0">WordPress 3.1升级后无法访问</a></li>
	<li><a href="http://www.zfkun.com/102.html" title="Windows 下 Nginx + PHP5 的安装与配置 (2010 年 01 月 28 日)" data-comment="0">Windows 下 Nginx + PHP5 的安装与配置</a></li>
	<li><a href="http://www.zfkun.com/35.html" title="PHP CURL函数库 (2010 年 01 月 16 日)" data-comment="0">PHP CURL函数库</a></li>
	<li><a href="http://www.zfkun.com/95.html" title="Nginx 0.8.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器（第5版） (2010 年 01 月 28 日)" data-comment="0">Nginx 0.8.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器（第5版）</a></li>
	<li><a href="http://www.zfkun.com/366.html" title="Market Enabler &#8211; Android越狱改区利器 (2011 年 07 月 10 日)" data-comment="2">Market Enabler &#8211; Android越狱改区利器</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/417.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[转]利用跨域资源共享（CORS）实现ajax跨域调用</title>
		<link>http://www.zfkun.com/394.html</link>
		<comments>http://www.zfkun.com/394.html#comments</comments>
		<pubDate>Fri, 15 Jul 2011 05:14:06 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[cors]]></category>
		<category><![CDATA[credentialed]]></category>
		<category><![CDATA[crossdomain]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[orign]]></category>
		<category><![CDATA[preflighted]]></category>
		<category><![CDATA[XDomainRequest]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=394</guid>
		<description><![CDATA[几年前，网站开发者都因为ajax的同源策略而撞了南墙。当我们惊叹于XMLHttpRequest对象跨浏览器支持所带来的巨大进步时，我们很快发现没有一个方法可以使我们用JavaScript实现请求跨域访问，对此我们哀叹不已。每个人在他们自己的网站上建立代理来摆脱这种限制。虽然开发者利用服务器代理和其它技巧避开了这种限制，而在社区的抗议者允许ajax在本地跨域调用。许多人还没意识到当前几乎所有的浏览器（Internet Explorer 8+， Firefox 3.5+， Safari 4+和 Chrome）都可通过名为Cross-Origin Resource Sharing的协议支持ajax跨域调用。 <a href="http://www.zfkun.com/394.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>几年前，网站开发者都因为ajax的<a title="Same origin policy for Javascript" href="https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript" target="_blank">同源策略</a>而撞了南墙。当我们惊叹于XMLHttpRequest对象跨浏览器支持所带来的巨大进步时，我们很快发现没有一个方法可以使我们用<strong>JavaScript实现请求跨域</strong>访问，对此我们哀叹不已。每个人在他们自己的网站上建立代理（which was the onset of a new host of open redirect problems）来摆脱这种限制。虽然开发者利用服务器代理和其它技巧避开了这种限制，而在社区的抗议者允许ajax在本地跨域调用。许多人还没意识到当前几乎所有的浏览器（Internet Explorer 8+， Firefox 3.5+， Safari 4+和 Chrome）都可通过名为<strong>Cross-Origin Resource Sharing</strong>的协议支持ajax跨域调用。</p>
<h3>跨域资源共享（CORS）</h3>
<p><a title="" href="http://www.w3.org/TR/access-control/" target="_blank">Cross-Origin Resource Sharing</a> (<strong>CORS</strong>)是W3c工作草案，它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方，从而决定请求或响应成功与否。</p>
<p>对一个简单的请求，没有自定义头部，要么使用GET，要么使用POST，它的主体是text/plain,请求用一个名叫Orgin的额外的头部发送。Origin头部包含请求页面的头部（协议，域名，端口），这样服务器可以很容易的决定它是否应该提供响应。</p>
<blockquote><p>Origin: http://www.nczonline.net</p></blockquote>
<p>如果服务器确定请求被通过，它将发送一个Access-Control-Allow-Origin头部响应发送请求的同一个源，如果是一个公共资源，则返回“*”。如：</p>
<blockquote><p>Access-Control-Allow-Origin: http://www.nczonline.net</p></blockquote>
<p>如果头部丢失，或者源不匹配，那么浏览器将拒绝请求。如果一切顺利，浏览器将处理请求。注意，请求和响应都不包括cookie信息。</p>
<p>先前提到的所有浏览器都支持这些简单的请求。FF3.5 +，Safari 4和chrome通过使用XMLHttpRequest对象支持其使用。当尝试在不同域打开一个资源时，不需任何代码，这个行为会自动触发。如：</p>
<pre name="code" class="js">var xhr = new XMLHttpRequest();
xhr.open("get", "http://www.nczonline.net/some_resource/", true);
xhr.onload = function(){  //instead of onreadystatechange
    //do something
};
xhr.send(null);</pre>
<p>在IE8中也是一样，用同样的方式你需要使用<a title="XDomainRequest Object" href="http://msdn.microsoft.com/en-us/library/cc288060%28VS.85%29.aspx" target="_blank">XDomainRequest object</a>。</p>
<pre name="code" class="js">var xdr = new XDomainRequest();
xdr.open("get", "http://www.nczonline.net/some_resource/");
xdr.onload = function(){
    //do something
};
xdr.send();</pre>
<p>Mozilla小组在他们关于<a title="" href="http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/" target="_blank">CORS的留言</a>中建议应该检查withCredentials属性的存在性，从而决定浏览器是否通过XHR支持CORS。你可以合并<strong>XDomainRequest </strong>对象的存在性来支持所有的浏览器：</p>
<pre name="code" class="js">function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

var request = createCORSRequest("get", "http://www.nczonline.net/");
if (request){
    request.onload = function(){
        //do something with request.responseText
    };
    request.send();
}</pre>
<p>Firefox, Safari, 和Chrome的XMLHttpRequest对象与IE的XDomainRequest对象有着相似的充分的接口，这些模式运行的很好。常见的接口属性/方法:</p>
<ul>
<li>abort()——用来终止已在进程中请求。</li>
<li>onerror()——替代onreadystatechange方法来探测错误。</li>
<li>onload()——替代onreadystatechange方法来探测成功。</li>
<li>responseText——用来取得响应地文本。</li>
<li>send()——用来发送请求。</li>
</ul>
<h3>Preflighted请求</h3>
<p>除了GET或POST，通过一种称之为<strong>preflighted</strong>请求的服务器透明验证机制，CORS允许使用自定义的头部和方法，以及不同主体内容类型。当你尝试使用高级选项中的一个来试着建立一个请求时，这时就建立了一个preflighted请求。该请求使用可选的方法，并发送如下头部：</p>
<ul>
<li>Origin——与简单请求相同。</li>
<li>Access-Control-Request-Method——请求将要使用的方法。</li>
<li>Access-Control-Request-Headers——（可选）一个逗号分开的正被使用的自定义头部列表。</li>
</ul>
<p>例子假定一个头部自定义为NCZ的POST请求：</p>
<blockquote><p>Origin: http://www.nczonline.net<br />
Access-Control-Request-Method: POST<br />
Access-Control-Request-Headers: NCZ</p></blockquote>
<p>在请求期间，服务器能决定是否允许这类请求。服务器通过在响应中发送以下头部来与浏览器通信。</p>
<ul>
<li>Access-Control-Allow-Origin——与简单请求相同。</li>
<li>Access-Control-Allow-Methods——用逗号分开的可接受的方法列表。</li>
<li>Access-Control-Allow-Headers——用逗号分开的服务器可接受的头部列表。</li>
<li>Access-Control-Max-Age——preflighted 请求应该被缓存的时间。</li>
</ul>
<p>如：</p>
<blockquote><p>Access-Control-Allow-Origin: http://www.nczonline.net<br />
Access-Control-Allow-Methods: POST, GET<br />
Access-Control-Allow-Headers: NCZ<br />
Access-Control-Max-Age: 1728000</p></blockquote>
<p>preflighted 请求一旦作出，结果将按响应中规定的时间缓存下来；第一次做出这样的请求，你将引发一次额外的HTTP请求。</p>
<p>Firefox 3.5+, Safari 4+和Chrome都支持preflighted 请求，IE8则不支持。</p>
<h3>Credentialed请求</h3>
<p>默认状态下，跨域请求不提供证书（cookie、HTTP身份验证、客户端SSL证书）。你可以规定一个请求应该通过设置withCredentials属性为true来发送证书。如果服务器允许credentialed请求，那么它将用下面的头部作出响应：</p>
<p>如果一个<strong>credentialed</strong>请求被发送，这个头部不会作为响应地一部分被发送。浏览器不会将响应传递给JavaScript(responseText是一个空字符串，状态为0，onerror()被调用)。注意，服务器也能发送这个HTTP头部作为preflight响应的一部分，以此来表明该源允许发送credentialed请求。</p>
<blockquote><p>Access-Control-Allow-Credentials: true</p></blockquote>
<p>IE8不支持withCredentials属性，Firefox 3.5+, Safari 4+和Chrome都支持它。</p>
<h3>结论</h3>
<p>在现代web浏览器中对跨域AJAX调用有许多可靠地支持，然而，大多数开发者仍没意识这些强大的功能力。只需在JavaScript和服务器端做一点额外的工作以保证正确的头部被发送即可使用它。在允许高级请求和credentialed请求方面，IE8的执行有些滞后，但希望它对CORS的支持将会继续改进。如果你想了解更多，我强烈建议你检查<a title="" href="http://arunranga.com/examples/access-control/" target="_blank">Arun Ranganathan的示例页</a>。</p>
<h3>相关阅读</h3>
<ul>
<li><a title="Cross-domain XHR removed from Firefox 3" href="http://www.nczonline.net/blog/2008/04/27/cross-domain-xhr-removed-from-firefox-3/" target="_blank">Cross-domain XHR removed from Firefox 3</a></li>
<li><a title="Firefox 3.5/Firebug XMLHttpRequest and readystatechange bug" href="http://www.nczonline.net/blog/2009/07/09/firefox-35firebug-xmlhttprequest-and-readystatechange-bug/" target="_blank">Firefox 3.5/Firebug XMLHttpRequest and readystatechange bug</a></li>
<li><a title="Mentioned in Microsoft whitepaper" href="http://www.nczonline.net/blog/2008/07/05/mentioned-in-microsoft-whitepaper/" target="_blank">Mentioned in Microsoft whitepaper</a></li>
<li><a title="XMLHttp Requests For Ajax" href="http://www.nczonline.net/blog/2006/03/14/xmlhttp-requests-for-ajax/" target="_blank">XMLHttp Requests For Ajax</a></li>
<li><a title="Firebug" href="http://www.nczonline.net/blog/2006/03/05/firebug/" target="_blank">Firebug</a></li>
<li><a title="Web definitions: DOM, Ajax, and more" href="http://www.nczonline.net/blog/2009/09/29/web-definitions-dom-ajax-and-more/" target="_blank">Web definitions: DOM, Ajax, and more</a></li>
</ul>
<p><strong>原文地址：</strong><a title="cross domain ajax with cross origin resource sharing" href="http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/" target="_blank">http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/</a></p>

	标签：<a href="http://www.zfkun.com/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.zfkun.com/tag/cors" title="cors" rel="tag">cors</a>, <a href="http://www.zfkun.com/tag/credentialed" title="credentialed" rel="tag">credentialed</a>, <a href="http://www.zfkun.com/tag/crossdomain" title="crossdomain" rel="tag">crossdomain</a>, <a href="http://www.zfkun.com/tag/javascript" title="JavaScript" rel="tag">JavaScript</a>, <a href="http://www.zfkun.com/tag/js" title="js" rel="tag">js</a>, <a href="http://www.zfkun.com/tag/orign" title="orign" rel="tag">orign</a>, <a href="http://www.zfkun.com/tag/preflighted" title="preflighted" rel="tag">preflighted</a>, <a href="http://www.zfkun.com/tag/xdomainrequest" title="XDomainRequest" rel="tag">XDomainRequest</a>, <a href="http://www.zfkun.com/tag/xmlhttprequest" title="XMLHttpRequest" rel="tag">XMLHttpRequest</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/147.html" title="前端资源文件缓存清除一法 (2010 年 11 月 25 日)" data-comment="0">前端资源文件缓存清除一法</a></li>
	<li><a href="http://www.zfkun.com/80.html" title="[转]Google Closure: 糟糕的JavaScript (2010 年 01 月 19 日)" data-comment="0">[转]Google Closure: 糟糕的JavaScript</a></li>
	<li><a href="http://www.zfkun.com/388.html" title="window.open() 之句柄保持和重连 (2011 年 07 月 14 日)" data-comment="0">window.open() 之句柄保持和重连</a></li>
	<li><a href="http://www.zfkun.com/115.html" title="Comet—“服务器推”技术 (2010 年 03 月 03 日)" data-comment="0">Comet—“服务器推”技术</a></li>
	<li><a href="http://www.zfkun.com/154.html" title="随机颜色 (2011 年 01 月 12 日)" data-comment="0">随机颜色</a></li>
	<li><a href="http://www.zfkun.com/59.html" title="腾讯TT、遨游浏览器检测 (2010 年 01 月 16 日)" data-comment="0">腾讯TT、遨游浏览器检测</a></li>
	<li><a href="http://www.zfkun.com/55.html" title="绝对震撼!10款动感图片展示js代码 (2010 年 01 月 16 日)" data-comment="0">绝对震撼!10款动感图片展示js代码</a></li>
	<li><a href="http://www.zfkun.com/176.html" title="原生JSON.parse解析异常问题 (2011 年 03 月 18 日)" data-comment="0">原生JSON.parse解析异常问题</a></li>
	<li><a href="http://www.zfkun.com/226.html" title="Windows7下搭建Node.js环境 (2011 年 04 月 06 日)" data-comment="1">Windows7下搭建Node.js环境</a></li>
	<li><a href="http://www.zfkun.com/109.html" title="Understanding and Solving Internet Explorer Leak Patterns (2010 年 02 月 28 日)" data-comment="0">Understanding and Solving Internet Explorer Leak Patterns</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/394.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>window.open() 之句柄保持和重连</title>
		<link>http://www.zfkun.com/388.html</link>
		<comments>http://www.zfkun.com/388.html#comments</comments>
		<pubDate>Thu, 14 Jul 2011 09:21:50 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[opener]]></category>
		<category><![CDATA[references]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=388</guid>
		<description><![CDATA[window.open()是挺常用的弹窗方式，大部分时候用在一些会话框提示、上传、第三方应用交互等，这时若需要面对资源保持的问题时，就需要一些特殊的技巧来fix。 <a href="http://www.zfkun.com/388.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>window.open()是挺常用的弹窗方式，大部分时候用在一些会话框提示、上传、第三方应用交互等，这时若需要面对资源保持的问题时，就需要一些特殊的技巧来fix。</p>
<p>通常window.open 子页面的方式为：</p>
<p>childWinHandler = window.open(&#8216;child.html&#8217;, &#8216;childWinName&#8217;, &#8216;height=100,width=100&#8242;);</p>
<p>这种方式的弹窗，在保证父页面不会被重定向 或 reload的前提下，就不用担心子页面窗口的句柄引用问题。</p>
<p>因为父亲页面中的 childWinHandler 变量存储着 子页面窗口句柄的对象引用。</p>
<p>但，若父页面因为某些原因临时重定向走了而后再回来了（或 reload/refresh了），这时子页面窗口句柄对象的引用就彻底丢失了。</p>
<p>如果，当前应用是个第三方登录接入或者级别较重要的应用的话，这样的问题可能会带来很多不必要的麻烦。</p>
<p>so, 如何解决呢？</p>
<p>google + 试验，以下是个值得参考的方案（支持 IE6+，FF,  Chrome, Safari 等）</p>
<p>&nbsp;</p>
<div class="wp-caption alignnone" style="width: 695px"><a href="http://photo.staticsdo.com/a1/158/432/455/59905-1224118696-8.jpg"><img title="window.open() 之句柄保持和重连" src="http://photo.staticsdo.com/a1/158/432/455/59905-1224118696-8.jpg" alt="window.open() 之句柄保持和重连" width="685" height="307" /></a><p class="wp-caption-text">window.open() 之句柄保持和重连</p></div>
<p>&nbsp;</p>
<p><a title="window.open()之句柄保持和重连 - DEMO演示" href="http://www.zfkun.com/demo/window-open-reconnect/demo.html" target="_blank">【点击查看DEMO】</a></p>
<p>&nbsp;</p>
<p>原理很简单：</p>
<p>在 window.open(&#8216;child.html&#8217;, &#8216;子窗口名&#8217;,'窗口参数&#8217;) 子页面前，先 window.open(”, &#8216;子窗口名&#8217;,'窗口参数&#8217;)  空页面，</p>
<p>注意第一个参数是 空字符串，这样调用后，只需要通过判断 返回的句柄对象的 location.href 是否为子页面地址，</p>
<p>就可以判断出当前窗口句柄保持的是否是之前的子页面窗口。</p>
<p>若是，则无需再open，直接focus即可。</p>
<p>若不是，则放心的重新open子页面窗口，即可。</p>
<p>&nbsp;</p>
<p>问题：</p>
<p>经过测试</p>
<p>IE6，在保证父页面不close的前提下，一切工作正常。但是父亲页面要是关闭后再重新打开，这时无法让子页面focus置顶，而且</p>
<p>这时以后若关闭子页面父页面内的 openWinHandler 变量的访问直接抛异常，导致无法走通open流程。</p>
<p>而 chrome 稍稍比IE6好一些起码不抛异常，只是父窗口关闭后，就好像再也找不到之前的那个窗口句柄，会再新开子窗口，貌似引用资源被释放一样。</p>
<p>其他浏览器，由于时间有限，就没仔细测试，也许还有遗漏的地方，若发现请反馈告诉我，谢谢。</p>
<p>&nbsp;</p>
<p>总结：</p>
<p>在某些条件下，这种方式不乏是个折中的可参考方案。</p>
<p>参考：</p>
<p><a href="http://josephj.com/entry.php?id=367">http://josephj.com/entry.php?id=367</a></p>
<p><a href="http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/48485/page2">http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/48485/page2</a></p>
<p>&nbsp;</p>

	标签：<a href="http://www.zfkun.com/tag/javascript" title="JavaScript" rel="tag">JavaScript</a>, <a href="http://www.zfkun.com/tag/js" title="js" rel="tag">js</a>, <a href="http://www.zfkun.com/tag/open" title="open" rel="tag">open</a>, <a href="http://www.zfkun.com/tag/opener" title="opener" rel="tag">opener</a>, <a href="http://www.zfkun.com/tag/references" title="references" rel="tag">references</a>, <a href="http://www.zfkun.com/tag/window" title="window" rel="tag">window</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/394.html" title="[转]利用跨域资源共享（CORS）实现ajax跨域调用 (2011 年 07 月 15 日)" data-comment="0">[转]利用跨域资源共享（CORS）实现ajax跨域调用</a></li>
	<li><a href="http://www.zfkun.com/80.html" title="[转]Google Closure: 糟糕的JavaScript (2010 年 01 月 19 日)" data-comment="0">[转]Google Closure: 糟糕的JavaScript</a></li>
	<li><a href="http://www.zfkun.com/154.html" title="随机颜色 (2011 年 01 月 12 日)" data-comment="0">随机颜色</a></li>
	<li><a href="http://www.zfkun.com/59.html" title="腾讯TT、遨游浏览器检测 (2010 年 01 月 16 日)" data-comment="0">腾讯TT、遨游浏览器检测</a></li>
	<li><a href="http://www.zfkun.com/55.html" title="绝对震撼!10款动感图片展示js代码 (2010 年 01 月 16 日)" data-comment="0">绝对震撼!10款动感图片展示js代码</a></li>
	<li><a href="http://www.zfkun.com/445.html" title="移动 Web 开发平台 Rexsee 开源 (2011 年 10 月 28 日)" data-comment="0">移动 Web 开发平台 Rexsee 开源</a></li>
	<li><a href="http://www.zfkun.com/176.html" title="原生JSON.parse解析异常问题 (2011 年 03 月 18 日)" data-comment="0">原生JSON.parse解析异常问题</a></li>
	<li><a href="http://www.zfkun.com/147.html" title="前端资源文件缓存清除一法 (2010 年 11 月 25 日)" data-comment="0">前端资源文件缓存清除一法</a></li>
	<li><a href="http://www.zfkun.com/226.html" title="Windows7下搭建Node.js环境 (2011 年 04 月 06 日)" data-comment="1">Windows7下搭建Node.js环境</a></li>
	<li><a href="http://www.zfkun.com/109.html" title="Understanding and Solving Internet Explorer Leak Patterns (2010 年 02 月 28 日)" data-comment="0">Understanding and Solving Internet Explorer Leak Patterns</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/388.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google+ for Android 安装</title>
		<link>http://www.zfkun.com/377.html</link>
		<comments>http://www.zfkun.com/377.html#comments</comments>
		<pubDate>Sun, 10 Jul 2011 05:52:59 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[资源共享]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[enabler]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[market]]></category>
		<category><![CDATA[plus]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=377</guid>
		<description><![CDATA[Google的官方电子市场（Android Market）早已有Google+ 的下载，可惜身在天朝无缘享受。当然，如果你不是个良民的话，可以考虑继续的看下去，也许就能发现你所需。- _^ <a href="http://www.zfkun.com/377.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Google的官方电子市场（<a title="Android Market" href="http://market.android.com/" target="_blank">Android Market</a>）早已有Google+ 的下载，可惜身在天朝无缘享受。</p>
<div id="attachment_367" class="wp-caption aligncenter" style="width: 535px"><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/07/android_market_forbidden.png"><img class="size-full wp-image-367" title="Android Market 访问限制" src="http://www.zfkun.com/blog/wp-content/uploads/2011/07/android_market_forbidden.png" alt="Android Market 访问限制" width="525" height="529" /></a><p class="wp-caption-text">Android Market 访问限制</p></div>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">当然，如果你不是个良民的话，可以考虑继续的看下去，也许就能发现你所需。- _^</span></p>
<h3>1. 自给自足，丰衣足食</h3>
<p>Android Market 主要是通过对手机设备的区域做的限制，所以可以选择一款Android 越狱改区软件解决之。</p>
<p>这个软件就是之前介绍过的 <a title="Market Enabler – Android越狱改区利器" href="http://www.zfkun.com/blog/index.php/archives/366">《Market Enabler – Android越狱改区利器》</a>。</p>
<p>装上MarketEnabler 轻松改下区到 T-Mobiel 即可立刻享受到资本主义的诱惑。</p>
<div id="attachment_378" class="wp-caption aligncenter" style="width: 246px"><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/07/google_plus_mobile.png"><img class="size-full wp-image-378" title="google+ for android" src="http://www.zfkun.com/blog/wp-content/uploads/2011/07/google_plus_mobile.png" alt="google+ for android" width="236" height="427" /></a><p class="wp-caption-text">google+ for android</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>2. 拿来主义,何乐不为</h3>
<p>我已经下载好了Google+ 的最新版本地下载，自取吧。  【 <a title="Google+ for andorid 本地下载" href="http://www.zfkun.com/soft/android/Google_1.0.2.apk" target="_blank">Google+ v1.02 本地下载</a>】</p>
<p>&nbsp;</p>
<p>Now, Happy Time !!</p>

	标签：<a href="http://www.zfkun.com/tag/android" title="android" rel="tag">android</a>, <a href="http://www.zfkun.com/tag/enabler" title="enabler" rel="tag">enabler</a>, <a href="http://www.zfkun.com/tag/google" title="google" rel="tag">google</a>, <a href="http://www.zfkun.com/tag/market" title="market" rel="tag">market</a>, <a href="http://www.zfkun.com/tag/plus" title="plus" rel="tag">plus</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/366.html" title="Market Enabler &#8211; Android越狱改区利器 (2011 年 07 月 10 日)" data-comment="2">Market Enabler &#8211; Android越狱改区利器</a></li>
	<li><a href="http://www.zfkun.com/search" title="站内搜索 (2011 年 07 月 17 日)" data-comment="0">站内搜索</a></li>
	<li><a href="http://www.zfkun.com/445.html" title="移动 Web 开发平台 Rexsee 开源 (2011 年 10 月 28 日)" data-comment="0">移动 Web 开发平台 Rexsee 开源</a></li>
	<li><a href="http://www.zfkun.com/80.html" title="[转]Google Closure: 糟糕的JavaScript (2010 年 01 月 19 日)" data-comment="0">[转]Google Closure: 糟糕的JavaScript</a></li>
	<li><a href="http://www.zfkun.com/454.html" title="Path UI by CSS3 (2011 年 12 月 06 日)" data-comment="0">Path UI by CSS3</a></li>
	<li><a href="http://www.zfkun.com/202.html" title="Google 的疯狂面试题 (2011 年 03 月 20 日)" data-comment="0">Google 的疯狂面试题</a></li>
	<li><a href="http://www.zfkun.com/76.html" title="Google Closure Tools (2010 年 01 月 19 日)" data-comment="2">Google Closure Tools</a></li>
	<li><a href="http://www.zfkun.com/372.html" title="apk文件的MIME类型 (2011 年 07 月 10 日)" data-comment="0">apk文件的MIME类型</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/377.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apk文件的MIME类型</title>
		<link>http://www.zfkun.com/372.html</link>
		<comments>http://www.zfkun.com/372.html#comments</comments>
		<pubDate>Sun, 10 Jul 2011 05:32:36 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[mime]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=372</guid>
		<description><![CDATA[今天更新日志时刚好需要提供apk文件的本地下载，测试下果然该死的WIN+IIS的虚拟主机不给力，因为缺少MIME识别而提示404。
其实文件路径是真实有效的，只是主机没有手动增加对apk文件类型的识别配置，所以默认给了404（体验还真好，FK）。
so, fix it !! <a href="http://www.zfkun.com/372.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今天更新日志时刚好需要提供apk文件的本地下载，测试下果然该死的WIN+IIS的虚拟主机不给力，因为缺少MIME识别而提示404。</p>
<p>其实文件路径是真实有效的，只是主机没有手动增加对apk文件类型的识别配置，所以默认给了404（体验还真好，FK）。</p>
<p>so, fix it !!</p>
<p>登录虚拟主机管理后台，手动添加了 apk 的 MIME 类型值为： application/vnd.android.package-archive</p>
<p>ok, all done !!</p>
<p>&nbsp;</p>
<p>测试下识别效果:  <a title="MarketEnabler本地下载" href="http://www.zfkun.com/soft/android/MarketEnabler_v3.1.1.2.apk" target="_blank">MarketEnabler v3.1.1.2 本地下载</a> （<a title="Market Enabler – Android越狱改区利器" href="http://www.zfkun.com/blog/index.php/archives/366" target="_blank">顺便看下它所在的文章《Market Enabler – Android越狱改区利器》</a>）</p>

	标签：<a href="http://www.zfkun.com/tag/android" title="android" rel="tag">android</a>, <a href="http://www.zfkun.com/tag/apk" title="apk" rel="tag">apk</a>, <a href="http://www.zfkun.com/tag/iis" title="iis" rel="tag">iis</a>, <a href="http://www.zfkun.com/tag/mime" title="mime" rel="tag">mime</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/445.html" title="移动 Web 开发平台 Rexsee 开源 (2011 年 10 月 28 日)" data-comment="0">移动 Web 开发平台 Rexsee 开源</a></li>
	<li><a href="http://www.zfkun.com/454.html" title="Path UI by CSS3 (2011 年 12 月 06 日)" data-comment="0">Path UI by CSS3</a></li>
	<li><a href="http://www.zfkun.com/366.html" title="Market Enabler &#8211; Android越狱改区利器 (2011 年 07 月 10 日)" data-comment="2">Market Enabler &#8211; Android越狱改区利器</a></li>
	<li><a href="http://www.zfkun.com/377.html" title="Google+ for Android 安装 (2011 年 07 月 10 日)" data-comment="0">Google+ for Android 安装</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/372.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Market Enabler &#8211; Android越狱改区利器</title>
		<link>http://www.zfkun.com/366.html</link>
		<comments>http://www.zfkun.com/366.html#comments</comments>
		<pubDate>Sun, 10 Jul 2011 05:14:09 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[资源共享]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[enabler]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[market]]></category>
		<category><![CDATA[region]]></category>
		<category><![CDATA[改区]]></category>
		<category><![CDATA[越狱]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=366</guid>
		<description><![CDATA[Google的官方电子市场（Android Market）啥都好，连对天朝的关系处理也很好，以至于天朝用户访问时很多产品不提供下载。 so, let's fix it! <a href="http://www.zfkun.com/366.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Google的官方电子市场（<a title="Android Market" href="http://market.android.com/" target="_blank">Android Market</a>）啥都好，连对天朝的关系处理也很好，以至于天朝用户访问时很多产品不提供下载。</p>
<div id="attachment_367" class="wp-caption aligncenter" style="width: 535px"><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/07/android_market_forbidden.png"><img class="size-full wp-image-367" title="android_market_forbidden" src="http://www.zfkun.com/blog/wp-content/uploads/2011/07/android_market_forbidden.png" alt="android market forbidden" width="525" height="529" /></a><p class="wp-caption-text">Android Market 访问限制</p></div>
<p>&nbsp;</p>
<p>so, let&#8217;s fix it!</p>
<h3>面前几条路：</h3>
<ol>
<li>越狱,改区（推荐）</li>
<li>google 去下载别人下载过的apk分享</li>
<li>换手机（非土豪可无视）</li>
<li>坐等开放（如果你伤的起的话 &#8211; -!）</li>
</ol>
<p>&nbsp;</p>
<p>so, 介绍下方案1：</p>
<p>google 了下比较好点的就是 MarketEnabler。（<a title="MarketEnabler本地下载" href="http://www.zfkun.com/soft/android/MarketEnabler_v3.1.1.2.apk" target="_blank">MarketEnabler v3.1.1.2 本地下载</a>）</p>
<div id="attachment_368" class="wp-caption aligncenter" style="width: 246px"><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/07/MarketEnabler.png"><img class="size-full wp-image-368 " title="MarketEnabler" src="http://www.zfkun.com/blog/wp-content/uploads/2011/07/MarketEnabler.png" alt="Market Enabler" width="236" height="427" /></a><p class="wp-caption-text">Market Enabler 选区列表</p></div>
<p>以上是改区选择界面，我比较推荐选择改区到 US 的T-Mobile ，貌似兼容性要好一些。</p>
<div id="attachment_369" class="wp-caption aligncenter" style="width: 246px"><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/07/MarketEnabler_dochange.png"><img class="size-full wp-image-369" title="MarketEnabler_dochange" src="http://www.zfkun.com/blog/wp-content/uploads/2011/07/MarketEnabler_dochange.png" alt="Market Enabler dochange" width="236" height="427" /></a><p class="wp-caption-text">Market Enabler 改区选择</p></div>
<p>&nbsp;</p>
<p>选 fake this provider now 即可。</p>
<p>大功告成，立刻就可以访问下 电子市场 试试效果了。 ^_^</p>
<p>&nbsp;</p>
<h4>不过，人还无完人呢，更何况软件，网上也看到一些人说的小问题：</h4>
<ol>
<li>重启之后需要再设置</li>
<li>重启之后会导致APN设置不对，需要自动搜寻网络一下</li>
</ol>
<p>对于2来说，也没多大影响么。</p>
<p>至于 1么，很显然，我认为不是问题，反倒是好的，毕竟大部分时候我们还是想临时性修改。以免影响其他软件（如地图）的运行。</p>
<p>总体来说，此软件乃装机必备之选。</p>
<p><a title="MarketEnabler本地下载" href="http://www.zfkun.com/soft/android/MarketEnabler_v3.1.1.2.apk" target="_blank">MarketEnabler v3.1.1.2 本地下载</a></p>

	标签：<a href="http://www.zfkun.com/tag/android" title="android" rel="tag">android</a>, <a href="http://www.zfkun.com/tag/enabler" title="enabler" rel="tag">enabler</a>, <a href="http://www.zfkun.com/tag/hack" title="hack" rel="tag">hack</a>, <a href="http://www.zfkun.com/tag/market" title="market" rel="tag">market</a>, <a href="http://www.zfkun.com/tag/region" title="region" rel="tag">region</a>, <a href="http://www.zfkun.com/tag/%e6%94%b9%e5%8c%ba" title="改区" rel="tag">改区</a>, <a href="http://www.zfkun.com/tag/%e8%b6%8a%e7%8b%b1" title="越狱" rel="tag">越狱</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/377.html" title="Google+ for Android 安装 (2011 年 07 月 10 日)" data-comment="0">Google+ for Android 安装</a></li>
	<li><a href="http://www.zfkun.com/445.html" title="移动 Web 开发平台 Rexsee 开源 (2011 年 10 月 28 日)" data-comment="0">移动 Web 开发平台 Rexsee 开源</a></li>
	<li><a href="http://www.zfkun.com/417.html" title="WordPress Rewrite SEO 之404方式折腾笔记 (2011 年 07 月 17 日)" data-comment="1">WordPress Rewrite SEO 之404方式折腾笔记</a></li>
	<li><a href="http://www.zfkun.com/454.html" title="Path UI by CSS3 (2011 年 12 月 06 日)" data-comment="0">Path UI by CSS3</a></li>
	<li><a href="http://www.zfkun.com/216.html" title="Javascript浏览器另类探测技巧 (2011 年 03 月 20 日)" data-comment="0">Javascript浏览器另类探测技巧</a></li>
	<li><a href="http://www.zfkun.com/142.html" title="IE6+和FF的CSS Hack (2010 年 04 月 23 日)" data-comment="0">IE6+和FF的CSS Hack</a></li>
	<li><a href="http://www.zfkun.com/372.html" title="apk文件的MIME类型 (2011 年 07 月 10 日)" data-comment="0">apk文件的MIME类型</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/366.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 中文Tag 显示404错误的BUG修正</title>
		<link>http://www.zfkun.com/344.html</link>
		<comments>http://www.zfkun.com/344.html#comments</comments>
		<pubDate>Thu, 07 Jul 2011 08:15:15 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[mb_convert_encoding]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=344</guid>
		<description><![CDATA[今天无意间查看站点的谷歌统计数据时发现，存在200+的错误页面。 - -!
分析了下，最终锁定WordPress 的中文支持问题。由于WordPress对中文的支持不好，主要体现在路由的解析上，导致了中文Tag的URL解析异常，从而显示了404结果页。 <a href="http://www.zfkun.com/344.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今天无意间查看站点的谷歌统计数据时发现，存在200+的错误页面。 &#8211; -!</p>
<p>分析了下，最终锁定WordPress 的中文支持问题。</p>
<p>由于WordPress对中文的支持不好，主要体现在路由的解析上，导致了中文Tag的URL解析异常，从而显示了404结果页。</p>
<p>&nbsp;</p>
<p>尝试了Google来的一个普遍常用的方案：</p>
<p>修改 /wp-includes/classes.php 文件2处代码（154行、159行），</p>
<pre name="code" class="php">// 修改前
$pathinfo =$_SERVER['PATH_INFO'];
// 修改后
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");

// 修改前
$req_uri = $_SERVER['REQUEST_URI'];
// 修改后
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>本以为可以轻松搞定，但经过验证，我无语了。  classes.php 的修改竟然不起作用！！</p>
<p>经过调试，发现文件的确是修改成功了，但从表象上看，PHP运行时用到的classes.php 文件似乎被缓存了一样，根本没使用我修改后的新文件。</p>
<p>初步估计，可能跟地址引用实例WP类有关系，但是时间有限，懒的去深究了，后面慢慢研究。</p>
<p>&nbsp;</p>
<p>暂且做了最简单的fix, 修改 index.php, 头部新增一下2行 :</p>
<pre name="code" class="php">// fix for chinese tag
$_SERVER['PATH_INFO'] = mb_convert_encoding($_SERVER['PATH_INFO'],"UTF-8","GBK");
$_SERVER['REQUEST_URI'] = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");</pre>
<p>问题，算是得到了解决。 谢天谢地。回头找时间查下 classes.php 这类核心文件为什么修改不能生效的问题。</p>

	标签：<a href="http://www.zfkun.com/tag/404" title="404" rel="tag">404</a>, <a href="http://www.zfkun.com/tag/bug" title="bug" rel="tag">bug</a>, <a href="http://www.zfkun.com/tag/mb_convert_encoding" title="mb_convert_encoding" rel="tag">mb_convert_encoding</a>, <a href="http://www.zfkun.com/tag/rewrite" title="rewrite" rel="tag">rewrite</a>, <a href="http://www.zfkun.com/tag/tag" title="tag" rel="tag">tag</a>, <a href="http://www.zfkun.com/tag/wordpress" title="wordpress" rel="tag">wordpress</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/417.html" title="WordPress Rewrite SEO 之404方式折腾笔记 (2011 年 07 月 17 日)" data-comment="1">WordPress Rewrite SEO 之404方式折腾笔记</a></li>
	<li><a href="http://www.zfkun.com/275.html" title="[转]IE6、IE7、IE8 CSS Bug兼容解决记录 (2011 年 06 月 14 日)" data-comment="0">[转]IE6、IE7、IE8 CSS Bug兼容解决记录</a></li>
	<li><a href="http://www.zfkun.com/74.html" title="wp_list_categories()参数说明 (2010 年 01 月 18 日)" data-comment="0">wp_list_categories()参数说明</a></li>
	<li><a href="http://www.zfkun.com/179.html" title="WordPress 3.1升级后无法访问 (2011 年 03 月 20 日)" data-comment="0">WordPress 3.1升级后无法访问</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/344.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]IE6、IE7、IE8 CSS Bug兼容解决记录</title>
		<link>http://www.zfkun.com/275.html</link>
		<comments>http://www.zfkun.com/275.html#comments</comments>
		<pubDate>Tue, 14 Jun 2011 10:05:04 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[ie]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=275</guid>
		<description><![CDATA[一份值得看下的IE6、IE7、IE8 CSS Bug兼容解决记录 <a href="http://www.zfkun.com/275.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1：li边距“无故”增加</p>
<p>任何事情都是有原因的，li边距也不例外。</p>
<p>先描述一下具体状况：有些时候li边距会突然增 加很多，值也不固定（只在IE6/IE7有这种现象），让人摸不着头脑，仔细“研究”发现是由于其低级元素ul的padding引 起，padding的上下值对li有影响，左右无影 响。所以只好笨手笨脚地把padding去掉，换成margin。这是能解决问题，但往往不是我们想要的结果，或许 还会引起其他不必要的怪现象。</p>
<p>现在终于发现解决这个问题的方法，其实很简单，既然是有ul引 起的，就设置ul的显示形式为*display:inline-block;即可，前面加*是只 针对IE6/IE7有效，其他浏览器并不渲染这个属性。</p>
<p>2：分页数字 字体用“Arial ”加粗不抖动</p>
<pre class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type"content="text/html; charset=gb2312"/&gt;
&lt;title&gt;无标题文档&lt;/title&gt;
&lt;link href="css/style.css"rel="stylesheet"type="text/css"/&gt;
&lt;style type="text/css"&gt;
body, ul, h1 {
font-family:Arial;
font-size:12px;
}

.page {
text-align:center;
}

.page a {
display:inline-block;
padding:5px 8px;
text-decoration:none;
border:1px solid #09F;
background-color:#0CF;
color:#FFF;
}

.page a:hover, .page .selected {
border:1px solid #CCC;
background-color:#FFF;
color:#000;
font-weight:bold;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;分页样式&lt;/h1&gt;
&lt;div&gt; &lt;a href="#"&gt;1&lt;/a&gt; &lt;a href="#"class="selected"&gt;2&lt;/a&gt; &lt;a href="#"&gt;3&lt;/a&gt; &lt;a href="#"&gt;4&lt;/a&gt; &lt;a href="#"&gt;5&lt;/a&gt;

&lt;a href="#"&gt;6&lt;/a&gt; &lt;a href="#"&gt;7&lt;/a&gt; &lt;a href="#"&gt;8&lt;/a&gt; &lt;a href="#"&gt;9&lt;/a&gt; &lt;a href="#"&gt;10&lt;/a&gt; &lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>3：IE6 CSS选择器区分IE6</p>
<p>IE6不支持子选择器；先针对IE6使用常规申明CSS选择器，然后再用子选择器针对IE7+及其他浏览器。</p>
<pre class="css">/*IE6 专用 */
.content {color:red;}

/* 其他浏览器 */
div&gt;p .content {color:blue;}</pre>
<p>4：IE6最小高度</p>
<p>IE6 不支持min-height属性，但它却认为height就是最小高度。解决方法：</p>
<p>使用ie6不支持但其余浏览器支持的属性!important。</p>
<pre class="css">#container{min-height:200px; height:auto !important; height:200px;}</pre>
<p>5：IE6100% 高度</p>
<p>在IE6下，如果要给元素定义100%高度，必须要明确定义它的父级元素的高度，如果你需要给元素定义满屏的高度，就得先给html和body定义height:100%;。</p>
<p>6：IE6躲猫猫bug</p>
<p>在IE6和IE7下，躲猫猫bug是一个非常恼人的问题。一个撑破了容器的浮动元素，如果在他之后有不浮动的内容，并且有一些定义了:hover的链接，当鼠标移到那些链接上时，在IE6下就会触发躲猫猫。</p>
<p>解决方法很简单：</p>
<p>1.在（那个未浮动的）内容之后添加一个&lt;span style=”clear: both;”&gt; &lt;/span&gt;<br />
2.触发包含了这些链接的容器的hasLayout，一个简单的方法就是给其定义height:1%;</p>
<p>7:IE6绝对定位元素的1像素间距bug</p>
<p>IE6下的这个错误是由于进位处理误差造成（IE7已修复），当绝对定位元素的父元素高或宽为奇数时，bottom和right会<br />
产生错误。唯一的解决办法就是给父元素定义明确的高宽值，但对于液态布局没有完美的解决方法。</p>
<p>8: IE下z-index的bug</p>
<p>在IE浏览器中，定位元素的z-index层级是相对于各自的父级容器，所以会导致z-index出现错误的表现。解决方法是给其父级元素定义z-index，有些情况下还需要定义position:relative。</p>
<p>9: Overflow Bug</p>
<p>在IE6/7中，overflow无法正确的隐藏有相对定位position:relative;的子元素。解决方法就是给外包容器.wrap加上position:relative;。</p>
<p>10: 横向列表宽度bug</p>
<p>如果你使用float:left;把&lt;li&gt;横向摆列，并且&lt;li&gt;内包含的&lt;a&gt;（或其他）触发了 hasLayout，在IE6下就会有错误的表现。解决方法很简单，只需要给&lt;a&gt;定义同样的float:left;即可。</p>
<p>11: 列表阶梯bug</p>
<p>列表阶梯bug通常会在给&lt;li&gt;的子元素&lt;a&gt;使用float:left;时触发，我们本意是要做一个横向的列表(通常 是导航栏)，但IE却可能呈现出垂直的或者阶梯状。<br />
解决办法就是给&lt;li&gt;定义float:left;而非子元素&lt;a&gt;，或者 给&lt;li&gt;定义display:inline;也可以解决。</p>
<p>12: 垂直列表间隙bug</p>
<p>当我们使用&lt;li&gt; 包含一个块级子元素时，IE6(IE7也有可能)会错误地给每条列表元素（&lt;li&gt;）之间添加空隙。<br />
解决方法：把&lt;a&gt;flaot并且清除float来解决这个问题；另外一个办法就是触发&lt;a&gt;的hasLayout（如定 义高宽、使用zoom:1;）；也可以给&lt;li&gt; 定义display:inline;来解决此问题；另外还有一个极有趣的方法，给包含的文本末尾添加一个空格。</p>
<p>13: IE6调整窗口大小的 Bug</p>
<p>当把body居中放置，改变IE浏览器大小的时候，任何在body里面的相对定位元素都会固定不动了。解决办法：</p>
<p>给body定义position:relative;就行了。</p>
<p>14: 文本重复Bug</p>
<p>在IE6中，一些隐藏的元素（如注释、display:none;的元素）被包含在一个浮动元素里，就有可能引发文本重复bug。</p>
<p>解决办法：给浮动元素添加display:inline;。</p>
<p>15：链接a的title属性中的文字换行</p>
<p>啥也不说，先上个图</p>
<p>我们都知道，可以给链接a加上title属性，这样鼠标移动上去会显示title属性定义的 文字，常常用来加一些提示语句，</p>
<p>比如说点击查看详情之类的，代码形如：</p>
<p>&lt;a href=”#” title=”点击查看详情”&gt;链接xx&lt;/a&gt;</p>
<p>。之前一直没有仔细注意过这个东西。如果鼠标浮动上去要显示更多东西的话，怎么实现呢。第一 反应是jquery的tooltip插件。今天无意中发现某个学院的网站鼠标移动上去可以显示这么完整的信息，效果看起来似乎还可以，就想看看怎么做的， 找了下，没发现有Javascript脚本，再往链接的地方一看，终于让我发现了门道了：</p>
<p>&lt;a href=&#8217;#&#8217; target=”_blank” title=”标题: 关于对我校2006年至2009年发展党员工作情况进…</p>
<p>发布日期: 2010-5-31 16:05:08 类别：院务通知 点击: 139&#8243;&gt;</p>
<p>[05-31]  关于对我校2006年至2009年发展党员工作情况进…</p>
<p>&lt;/a&gt;</p>
<p>注意到了吗。。很简单，只要使用 这样的转义符号,即可实现换行。在一些tooltip要求定制性不高的情况下，这样的显示效果相 当不错，而且是浏览器原生的效果，安逸。</p>
<p>哎，虽然号称精通div+css，但是发现一些小小但是很实用的技巧自己还不知道，看来html还有很多东西可以挖掘。</p>
<p>16：如何去掉点击链接时的虚线</p>
<p>解决方案1：在&lt;a href=”http://blog.sina.com/wangfengteacher”onFocus=”this.blur()&gt; Mike blog&lt;/a&gt;</p>
<p>解决方案2：在标签中加入 hidefocus&lt;a href=”http://blog.sina.com/wangfengteacher”hidefocus&gt; Mike blog&lt;/a&gt;</p>
<p>解决方案3: 如果连接太多，可以用外部链接 .HTC 文件。如，blur.htc</p>
<p>文件内容如下：</p>
<p>&lt;public:attach event=”onfocus”</p>
<p>onevent=”makeblur()”&gt;&lt;/public:attach&gt;</p>
<p>&lt;SCRIPT language=javascript&gt;</p>
<p>function makeblur(){</p>
<p>this.blur();</p>
<p>}</p>
<p>&lt;/SCRIPT&gt;</p>
<p>在 CSS 中加入如下代码：</p>
<p>A { behavior:url(blur.htc); }</p>
<p>解决方案4 ( 推荐 )：使用CSS样式，可加入代码：a {blr:expression_r(this.onFocus=this.blur())}</p>
<p>如果是FF等浏览器的话可这样写 a{ouline:none;}</p>
<p>17:制作1px细线表格</p>
<p>解决方案1 ( 推荐)：我们只要给这个table一个border-collapse:collapse的样式，就可以达到这个效果了。</p>
<p>具体如下：</p>
<p>1、HTML结构:</p>
<p>&lt;table width=”300&#8243; border=”1&#8243; cellpadding=”0&#8243;cellspacing=”0&#8243; bordercolor=”#C0C0C0&#8243;</p>
<p>style=”border-collapse:collapse;”&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td&gt; &lt;/td&gt;</p>
<p>&lt;td&gt; &lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td&gt; &lt;/td&gt;</p>
<p>&lt;td&gt; &lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td&gt; &lt;/td&gt;</p>
<p>&lt;td&gt; &lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p>
<p>18：IE6 下z-index无效</p>
<p>在CSS中，通过z-index这个属性改变层级，要让z-index起作用有个前提，就是元素的position属性要 是relative，absolute或是fixed。</p>
<p>z-index层级越高，内容越应该在上面显示。在大部分的浏览器在大部分的情况下，确实如此，但是不绝对，尤其遇到IE6。</p>
<p>1、关于效果截图的些必要说明</p>
<p>下面的不是废话，是为了更容易的理解我下面唾沫横飞的内容。</p>
<p>以下所有结果截图的大背景如下：</p>
<p>1、页面上固定不动的，一成不变的，送豪宅也不会从良的是一个黑色背景，透明度 40%，几乎满屏显示的层级为1的绝对定位层。HTML为：</p>
<p>&lt;div&gt;&lt;/div&gt;</p>
<p>对应CSS为：#blank{width:100%; height:600px; background:black; opacity:0.4; filter:alpha(opacity=40); position:absolute; left:0; top:0; z-index:1;}</p>
<p>作用是为了让层级关系一目了然。看：</p>
<p>这说明内容在z-index为1的绝对定位层之下。</p>
<p>这说明内容在z-index为1的绝对定位层之上。</p>
<p>2、页面上做对比的是美女图片，图片在半透明黑色绝对定位层的上面还是下面很容易辨别，这样，您就能够对我所说的z- index不起作用有很直观的认识了。</p>
<p>2、IE6的抱怨：浮动让我沉沦</p>
<p>现在开始真正的讲述 问题的产生，原因以及解决了。首先讲讲第一种z-index无论设置多高都不起作用情况。这种情况发生的条件有三个：1、父标签 position属性为relative；2、问题标签无position属性（不包括static）；3、问题标签含有浮动(float)属性。</p>
<p>您 可以拿下面的代码自己做个简单测试：</p>
<p>&lt;div&gt;&lt;/div&gt;</p>
<p>&lt;div style=”position:relative; z-index:9999;”&gt;</p>
<p>&lt;img style=”float:left;” src=”http://image.zhangxinxu.com/image/study/s/s256/mm2.jpg” /&gt;</p>
<p>&lt;/div&gt;</p>
<p>丫的，这z-index都9999了，层级够高吧，但是，看下面的图：</p>
<p>这一对比就知道问题了，可能有人会疑问，这会不会是IE6的relative自己感冒了，而不是浮动(float)携带 了“甲流病毒”。好，我现在去掉浮动，HTML代码如下：</p>
<p>&lt;div&gt;&lt;/div&gt;</p>
<p>&lt;div style=”position:relative; z-index:9999;”&gt;</p>
<p>&lt;img src=”http://image.zhangxinxu.com/image/study/s/s256/mm2.jpg” /&gt;</p>
<p>&lt;/div&gt;</p>
<p>结果IE6下：</p>
<p>我想，问题应该都清楚了，至于原因，我起初以为是haslayout搞的鬼，后来，用zoom一测试，发现不是（IE7 下无此bug也证明不是 haslayout的原因），似乎就是这个float会让z-index失效。由于将外部div的position:relative属性改为 absolute可以解决这一问题，我就怀疑是不是浮动让relative发生了些变化，float与relative在水平定位上可以说是近亲，会不会 是因为这两者搅和在一起所以什么“畸形”“体弱多病”就出现了。这仅是我的猜测而已，真正的原因还是去问IE6的后妈吧。</p>
<p>解决方法，解决方法有三，1、position:relative改 为position:absolute；2、去除浮动；3、浮动 元素添加position属性（如relative，absolute等）。</p>
<p>3、固执的IE6：它只认第一个爸爸</p>
<p>可能不少人知 道，这IE6下，层级的高低不仅要看自己，还要看自己的老爸这个后台是否够硬。用术语具体描述为：</p>
<p>父标签position属性为relative 或absolute时，子标签的absolute属性是相对于父标签而言的。而在IE6下，层级的表现有时候不是看子标签的z-index多高，而要看它 们的父标签的z-index谁高谁低。</p>
<p>有一定经验的人可能都知道上面的事实。但是，相信这里面很多人不知道IE6下，决定层级高低的不是当前的父标签，而是整 个DOM tree（节点树）的第一个relative属性的父标签。有时平时我们多处理一个父标签，z-index层级多而复杂的情况不多见，所以难免会有认识上 的小小偏差。</p>
<p>好，下面展示这个bug。</p>
<p>条件很简单，只要绝对定位的第一个元素的第一个爸爸，或者说是最老的那个爸爸级别的人的relative属性小于黑色半 透明层的z-index层级。例如下面的HTML代码：</p>
<p>&lt;div&gt;&lt;/div&gt;</p>
<p>&lt;div style=”position:relative;”&gt;</p>
<p>&lt;div style=”position:relative; z-index:1000;”&gt;</p>
<p>&lt;div style=”position:absolute; z-index:9999;”&gt;</p>
<p>&lt;img src=”http://image.zhangxinxu.com/image/study/s/s256/mm3.jpg” /&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>可以看到，mm3图片的父标签div 是绝对定位，层级9999，比1大多了，绝对定位的父标签层级1000(10000也一样)，也比黑色半透明层的z-index:1大多了，但是，我们可 怜的IE6童鞋——</p>
<p>再看看以Firefox为代表的其他童鞋：</p>
<p>IE7与IE6有着同样的bug，原因很简单，虽然图片所在div当前的老爸层级很高(1000)，但是由于老爸的老爸 不顶用，可怜了9999如此强势的孩子没有出头之日啊！</p>
<p>知道原因解决就很轻松了，给第一任老爸添加z-index后的HTML代 码如下：</p>
<p>&lt;div&gt;&lt;/div&gt;</p>
<p>&lt;div style=”position:relative; z-index:1;”&gt;</p>
<p>&lt;div style=”position:relative; z-index:1000;”&gt;</p>
<p>&lt;div style=”position:absolute; z-index:9999;”&gt;</p>
<p>&lt;img src=”http://image.zhangxinxu.com/image/study/s/s256/mm3.jpg” /&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>结果IE6童鞋喜笑颜开，春光灿烂：</p>
<p>19：css reset中的list-style:none</p>
<p>在IE6,7下,当UL不具有float:left;display:inline;时:</p>
<p>无论有没有list-style:none这个属性,列 表符都被隐藏,不占位置(下面代码中的5,6)</p>
<p>当UL具有float:left;display:inline;属性时</p>
<p>list- style:none,列表符被隐藏,但是仍然留有位置(list-style-position:inside);</p>
<p>未 设置list-style:none;列表符被隐藏,也不占位(list-style-position:outside)</p>
<p>在firefox中只要list-style-type为none ,则 无论list-stype-position的值为outside或inside , list-style都能很好的被隐藏</p>
<p>而在IE6,7中,仅 设置list-style:none,并不足以解决所有问题</p>
<p>所以我认为在css reset的时候使用 list-style:none outside none 更好</p>
<p>20：链接去边线（完全兼容）</p>
<p>a,a:hover{outline:none; blur:expression(this.onFocus=this.blur());}</p>
<p>21: display:inline-block 额外产生的6PX 或者4px margin</p>
<p>今天在做一个Timeline的模块的时候遇到一个棘手的问题： 给元素添加display:inline-block 属性的时候会产生额外的4px的margin-right。</p>
<p>原始代码</p>
<p>.YP_timelineChart_box li{</p>
<p>display:-moz-inline-stack;</p>
<p>display:inline-block;</p>
<p>zoom:1;</p>
<p>*display:inline;</p>
<p>text-indent:-3000px;</p>
<p>width:5px;</p>
<p>vertical-align:bottom;</p>
<p>background-color:#00FF00;</p>
<p>position:relative;</p>
<p>}</p>
<p>页面渲染结果：</p>
<p>每一列都会向右产生外边距4px，苦思不得其解，尝试负的外边距，但是涉及到其他的问题:每个li标签会重叠1-2个px，妨碍到鼠标hover状 态的事件。尝试修改doctype类型也不见效果。后来尝试了另外一个方法：</p>
<p>把原来的HTML 代码结构：</p>
<p>更改为：</p>
<p>这样就不会产生额外的外边距，也弄不清楚为什么会出现这种问题。先暂时记下，以后再研究研究。</p>
<p>&nbsp;</p>
<p>22: IE6中伪类:hover的使用及BUG</p>
<p>以前未曾遇到类似的问题，一番google，才知道这是IE6处理CSS伪类:hover的Bug。例如如下的代码：</p>
<p>&lt;style&gt;</p>
<p>a {color: #333;}</p>
<p>a span {color: green;}</p>
<p>a:hover {}</p>
<p>a:hover span {color: red; }</p>
<p>&lt;/style&gt;</p>
<p>&lt;a href=”http://www.taobao.com“&gt; 淘宝网 &lt;span&gt; 淘你喜欢 &lt;/span&gt;&lt;/a&gt;</p>
<p>在IE7/FF中，鼠标移动到链接上时，”淘你喜欢”字样会变为红色，但IE6则无反应。所以IE6的bug就是如果a 与 a:hover 的css定义是一样的，也就是说如果a:hover 中没有样式的改变，hover就不会被触发。但如果在a:hover{}增加一些特定的属性，例如</p>
<p>a:hover{border:none;}</p>
<p>或者</p>
<p>a:hover{padding:0;}</p>
<p>又或者</p>
<p>a:hover{background: none;}</p>
<p>此时hover就可以触发了。</p>
<p>23：原来IE6支持!important</p>
<p>.demo { color:#F00!important; color:#000; }/*IE6显示错误理解：.demo显示为黑色*/</p>
<p>/*而下面IE6是正确理解的：.demo显示为红色*/</p>
<p>.demo { color:#F00!important;}</p>
<p>.demo { color:#000; }</p>
<p>24:去掉button按钮左右两边的留白</p>
<p>&lt;!DOCTYPE html&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;meta charset=”utf-8&#8243; /&gt;</p>
<p>&lt;style&gt;</p>
<p>*{padding:0; margin:0}</p>
<p>input,button{overflow:visible;padding:0;}</p>
<p>&lt;/style&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;form id=”form1&#8243; name=”form1&#8243; method=”post” action=”"&gt;</p>
<p>&lt;input type=”submit” name=”button” id=”button” value=”button按钮左右留白的解决方法” /&gt;</p>
<p>&lt;/form&gt;</p>
<p>&lt;button&gt;&lt;span&gt;button按钮左右留白的解决方法&lt;/span&gt;&lt;/button&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>25:中文字体在css中的写法</p>
<p>黑体SimHei\9ED1\4F53黑体</p>
<p>宋体SimSun\5B8B\4F53宋体</p>
<p>新宋体 NSimSun\65B0\5B8B\4F53新宋体</p>
<p>仿宋FangSong\4EFF\5B8B仿宋</p>
<p>楷体KaiTi\6977\4F53 楷体</p>
<p>微软正黑体Microsoft JhengHei\5FAE\x8F6F\6B63\9ED1\4F53微软正黑体</p>
<p>微软雅黑Microsoft YaHei\5FAE\8F6F\96C5\9ED1微软雅黑</p>
<p>幼圆 YouYuan\5E7C\5706幼圆</p>
<p>26： ie6里width:100%是相对于上有高度设置的元素 其他浏览器是相对于上个相对定位或绝对定位的元素</p>
<p>&lt;div style=” width:600px; height:600px; background:#000;”&gt;</p>
<p>&lt;div style=” width:500px; height:500px; background:#333;”&gt;</p>
<p>&lt;div style=” float:left; background:#666; width:400px;” &gt;</p>
<p>&lt;div style=” width:300px; height:300px; background:#999;”&gt;</p>
<p>&lt;div style=” width:100%; height:100%; background:#f00; position:absolute; left:0; top:0;”&gt;</p>
<p>在非ie6的浏览器中都是满屏幕的红， 说明非ie6的浏览器的width和height的百分比，都是相对的上个相对定位或者绝对定位的元素，没有就为html元素，而ie6中的width和height 的百分比，相对的是上个有高宽显示设置的元素，而且height的百分比设置失效，所以上述代码在ie6中就出现宽度穿越了他的父元素而遇见width:500px;的元素的时候，边把自己设置成了width:500px;而height的设置则失效， 这个， 让人很蛋疼！ie6，真的该早点走了！</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>27： ie不缓存背景图片的解决办法</p>
<p>高性能web开发中，一张小小的图片请求能省的就省，可IE6存在不缓存背景图的bug.如果重复使用了一个图片作为背景，那么每用一次就会重新去服务器拉一次。。。给服务器带来巨大的压力。解决方法有两种，</p>
<p>1：采用JS</p>
<p>var ua = navigator.userAgent.toLowerCase();</p>
<p>var isIE6 = ua.indexOf(“msie 6&#8243;) &gt; -1;//判断是否为IE6</p>
<p>// remove css image flicker</p>
<p>//IE6下默认不缓存背景图片，CSS里每次更改图片的位置时都会重新发起请求，用这个方法告诉IE6缓存背景图片</p>
<p>if(isIE6){</p>
<p>try{</p>
<p>document.execCommand(“BackgroundImageCache”, false, true);</p>
<p>}catch(e){}</p>
<p>}</p>
<p>2.在页面上直接使用1个DIV元素来加载该图片，这样加载图片就能真正被缓存，鼠标移动也不会发送请求了。</p>
<p>28:ie6下css实现max/min-width/height</p>
<p>_width:expression(this.width&gt;300?”300px”:ture); max-width:300px;</p>
<p>_height:expression(this.height&gt;300?”300px”:ture); max-height:300px;</p>
<p>29：css空白外边距互相叠加的解决方法</p>
<p>body{width:300px; font-family:&#8217;微软雅黑&#8217;; font-size:1em; text-indent:10px; line-height:1.25;}</p>
<p>div{background:#000;margin:10px;}</p>
<p>div p{background:#f60;margin:15px}</p>
<p>这是一个div元素内嵌套p的简单样例,先别复制保存为html测试,在你看完上面的代码后,你是否以为它出为你呈现如下图的效果?</p>
<p>好,现在你可以复制上面代码,保存到本地,然后在浏览器中打开.你会惊讶的发现,它呈现给你的效果是这样的:</p>
<p>为什么会这样呢?按CSS中,对于有块级子元素的元素计算高度的方式,如果元素没有垂直边框和填充,那其高度就是其子元素顶部和底部边框边缘之间的距离.故,子元素的顶部和底部空白边就突出到元素的外围了.p元素的15px外边距与div元素的10px的外边距形成一个单一的15px垂直空白边,另外,形式的这个空白边并非为div所包围,而是呈现在div的外围.所以,我们看到了第二张效果图.</p>
<p>如何解决?本人比较推荐两种解决方式:</p>
<p>其一,为外围元素定义透明边框.具体到本例,即在样式div中加入border:1px solid #ddd;</p>
<p>其二,为外围元素定义内边距填充..具体到本例,即在样式div中加入padding:1px</p>
<p>另外,还可以通过外围元素绝对定位,或者定义子元素浮动等方式实现.</p>
<p>30：纯css解决多行文字垂直居中</p>
<p>&lt;style type=”text/css”&gt;</p>
<p>.alert{</p>
<p>width:400px;</p>
<p>height:250px;</p>
<p>display:table-cell;</p>
<p>vertical-align:middle;</p>
<p>line-height:1.5em;</p>
<p>border:1px solid red;</p>
<p>}</p>
<p>.alert_blank{</p>
<p>height:100%;</p>
<p>width:0;</p>
<p>display:inline;</p>
<p>vertical-align:middle;</p>
<p>zoom:1;</p>
<p>}</p>
<p>.alert_con{</p>
<p>width:100%;</p>
<p>zoom:1;</p>
<p>display:inline;</p>
<p>vertical-align:middle;</p>
<p>}</p>
<p>&lt;/style&gt;</p>
<p>&lt;div&gt;</p>
<p>&lt;div&gt;哥乃多行文字垂直居中～哥乃多行文字垂直居中～哥乃多行文字垂直居中～哥乃多行文字垂直居中～&lt;/div&gt;</p>
<p>&lt;/div&gt;</p>
<p>其大概原理为：第一个alert_blank容器，display:inline以后作为行内元素，它的高度为100%，宽度却为0，相当于紧贴外层容器左边框的一条透明的线，这样就使得外层容器里面只存在一行。外层容易的vertical-align:middle使得其内部相当于一行文字垂直居中。真正盛放内容的div也是display:inline，它对外和blank垂直居中，只要内部文字不超过blank的高度，这个效果将是完美的。虽然从语义化上讲，用空白div布局说不太过去，但是瑕不掩瑜。另：zoom:1是为了触发hasLayout。</p>
<p>31:关于flash遮盖div浮动层</p>
<p>(a) place Flash embed script in &lt;div&gt; container (I use SWFObject.js)[将flash嵌入脚本放到一个div容器中]</p>
<p>(b) add wmode=transparent to Flash embed script[增加wmode=transparent 到flash嵌入脚本]</p>
<p>(c) set &lt;div id=”flashcontent”&gt; container with z-index:-1; [将外层容器的z-index设置为-1]</p>
<p>(d) set &lt;body&gt; tag with style .. position:relative;left:0px;top:0px;z-index:0;</p>
<p>(otherwise Firefox does not accept negative z-index)</p>
<p>(e) set floating iframe in container with z-index: 99;[将浮动的iframe在容器中的zindex设置为99]</p>
<p>(f) use CSS to position flashcontent and htmlcontent containers.[使用css来调整flash容器和html容器的位置]</p>
<p>其他方案网上比较多见,不做阐述.在此说下使用第一个方案如何解决:</p>
<p>var so = new SWFObject(“XXX.swf”, “flashId”, “宽度”, “高度”, “版本”, “背景色”);</p>
<p>//设置flash不遮盖div层</p>
<p>so.addParam(“wmode”, “opaque”);</p>
<p>so.write(“flashcontent”);</p>
<p>如此设置即可让flash无法遮盖住div</p>
<p>32:如何处理ie6的文字行高</p>
<p>ie6下汉字就会显示偏上位置，而在标准浏览器中不存在这个问题字体 Tahoma,试下</p>
<p>不过如果有规定第一个字体是用啥的，那就只能忽略这个问题..我终于明白淘宝为啥把Tahoma字体放到第一位了</p>
<p>&lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;</p>
<p>&lt;html xmlns=”http://www.w3.org/1999/xhtml”&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8&#8243; /&gt;</p>
<p>&lt;title&gt;测试ie6的文字行高表现&lt;/title&gt;</p>
<p>&lt;style type=”text/css”&gt;</p>
<p>body,ul,li,p {margin:0;padding:0;}</p>
<p>body { font:12px/1.5  Tahoma,”宋体”,Arial, Helvetica, sans-serif; }</p>
<p>ul {float:left;list-style:none; margin-bottom:10px;}</p>
<p>ul li, p { margin-top:4px;background:silver;clear:left;}</p>
<p>ul li {float:left;margin-top:4px;}</p>
<p>&lt;/style&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;ul&gt;</p>
<p>&lt;li&gt;岁月不饶人哪&lt;/li&gt;</p>
<p>&lt;li&gt;hjgt&lt;/li&gt;</p>
<p>&lt;/ul&gt;</p>
<p>&lt;p&gt;岁月不饶人哪&lt;/p&gt;</p>
<p>&lt;p&gt;hjgt&lt;/p&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>33:利用 CSS 跨浏览器地隐藏文字一法</p>
<p>ont-size:0;        // for firefox &amp; opera</p>
<p>color: transparent; // for webkit</p>
<p>overflow:hidden;    // for IE</p>
<p>font-size:0;</p>
<p>filter:alpha(opacity=0);</p>
<p>自测后兼容的浏览器如下：</p>
<p>IE 6-8</p>
<p>Firefox 1-4</p>
<p>Opera 9-10</p>
<p>Safari 3-5</p>
<p>Chrome 1-6</p>
<p>34:button在chrome下默认有2px的margin</p>
<p>&lt;button&gt;在chrome下有两像素margin&lt;/button&gt;</p>
<p>35:ie6和ie7里面margin失效</p>
<p>&lt;div style=”padding:20px;background:#f00;”&gt;</p>
<p>&lt;div style=”background:#fff;height:200px;margin:50px;”&gt;我的margin在ie里面失效了&lt;/div&gt;</p>
<p>解决办法去掉里面div的高度</p>
<p>&nbsp;</p>

	标签：<a href="http://www.zfkun.com/tag/bug" title="bug" rel="tag">bug</a>, <a href="http://www.zfkun.com/tag/css" title="css" rel="tag">css</a>, <a href="http://www.zfkun.com/tag/ie" title="ie" rel="tag">ie</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/142.html" title="IE6+和FF的CSS Hack (2010 年 04 月 23 日)" data-comment="0">IE6+和FF的CSS Hack</a></li>
	<li><a href="http://www.zfkun.com/205.html" title="欺骗IE不出现Flash激活框的小发现 (2011 年 03 月 20 日)" data-comment="0">欺骗IE不出现Flash激活框的小发现</a></li>
	<li><a href="http://www.zfkun.com/344.html" title="WordPress 中文Tag 显示404错误的BUG修正 (2011 年 07 月 07 日)" data-comment="0">WordPress 中文Tag 显示404错误的BUG修正</a></li>
	<li><a href="http://www.zfkun.com/109.html" title="Understanding and Solving Internet Explorer Leak Patterns (2010 年 02 月 28 日)" data-comment="0">Understanding and Solving Internet Explorer Leak Patterns</a></li>
	<li><a href="http://www.zfkun.com/91.html" title="CSS圆角—透明圆角化背景图片 (2010 年 01 月 21 日)" data-comment="0">CSS圆角—透明圆角化背景图片</a></li>
	<li><a href="http://www.zfkun.com/87.html" title="CSS圆角—基本圆角框 (2010 年 01 月 21 日)" data-comment="0">CSS圆角—基本圆角框</a></li>
	<li><a href="http://www.zfkun.com/182.html" title="add bookmark for ie &#038; ff &#038; opera (2011 年 03 月 20 日)" data-comment="0">add bookmark for ie &#038; ff &#038; opera</a></li>
	<li><a href="http://www.zfkun.com/131.html" title="5 个简单实用的 CSS 属性 (2010 年 03 月 09 日)" data-comment="0">5 个简单实用的 CSS 属性</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/275.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu安装之wubi方式默认自动BT下载iso的问题</title>
		<link>http://www.zfkun.com/236.html</link>
		<comments>http://www.zfkun.com/236.html#comments</comments>
		<pubDate>Tue, 26 Apr 2011 07:12:38 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[开发编程]]></category>
		<category><![CDATA[bt]]></category>
		<category><![CDATA[iso]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wubi]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=236</guid>
		<description><![CDATA[正在研究一基于c的qqrobot，无奈需搭建linux开发环境。经过 Dev-cpp，Cygwin（已通过编译但运行异常，怀疑环境有关）的尝试，各有不足，遂选择新装ubuntu来解决。 <a href="http://www.zfkun.com/236.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>正在研究一基于c的qqrobot，无奈需搭建linux开发环境。</p>
<p>经过 Dev-cpp，Cygwin（已通过编译但运行异常，怀疑环境有关）的尝试，各有不足，遂选择新装ubuntu来解决。</p>
<p>印象里上次安装都是9.x 时代了，印象wubi方式安装（我要保证主要的windows系统正常办公用）没有问题的吧，这次竟然发现，默认每次都是从网络BT下载iso，无语ing&#8230;下就下么，竟然还是BT，而且源还都巨慢。</p>
<p>那就只能自给自足，丰衣足食了。经过手动尝试及谷歌接触，解决方法其实挺常见。</p>
<p>欲安装的官方原版iso与wubi.exe放置在一起即可。 &#8211; -</p>
<p>就好似开发时的库调用一样，本地没就调远程。</p>

	标签：<a href="http://www.zfkun.com/tag/bt" title="bt" rel="tag">bt</a>, <a href="http://www.zfkun.com/tag/iso" title="iso" rel="tag">iso</a>, <a href="http://www.zfkun.com/tag/ubuntu-2" title="ubuntu" rel="tag">ubuntu</a>, <a href="http://www.zfkun.com/tag/wubi" title="wubi" rel="tag">wubi</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/277.html" title="微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址 (2011 年 06 月 25 日)" data-comment="1">微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址</a></li>
	<li><a href="http://www.zfkun.com/449.html" title="Thinkpad 全系列驱动程序官方安装光盘下载 (2011 年 11 月 17 日)" data-comment="0">Thinkpad 全系列驱动程序官方安装光盘下载</a></li>
	<li><a href="http://www.zfkun.com/42.html" title="PS游戏大合集(内含”最终幻想”全系列原版ISO) (2010 年 01 月 16 日)" data-comment="0">PS游戏大合集(内含”最终幻想”全系列原版ISO)</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/236.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决VMware Tools installation cannot be started manually while Easy Install is in progress.</title>
		<link>http://www.zfkun.com/232.html</link>
		<comments>http://www.zfkun.com/232.html#comments</comments>
		<pubDate>Tue, 19 Apr 2011 10:31:22 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[开发编程]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=232</guid>
		<description><![CDATA[很多尝试VMware 7虚拟机的朋友都会发现，用Ghost xp安装Windows以后，在开始安装VMware Tools时，会弹出显示如下内容的警告框： VMware Tools installation cannot be started manually while Easy Install is in progress. 解决方法： 在开启虚拟机操作系统的情况下，在虚拟机设置中更改floppy为auto detect。然后点击菜单中的安装VMWare Tools，虚拟操作系统中的光驱里就会有VMWare Tools的安装程序了，自行安装即 标签：vmware, windows7 相关推荐 微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址 windows7 7068 X86三版本及下载]]></description>
			<content:encoded><![CDATA[<div>很多尝试VMware 7虚拟机的朋友都会发现，用Ghost xp安装Windows以后，在开始安装VMware Tools时，会弹出显示如下内容的警告框：</div>
<div></div>
<div>VMware Tools installation cannot be started manually while Easy Install is in progress.</div>
<div></div>
<div>解决方法：</div>
<div>在开启虚拟机操作系统的情况下，在虚拟机设置中更改floppy为auto detect。然后点击菜单中的安装VMWare Tools，虚拟操作系统中的光驱里就会有VMWare Tools的安装程序了，自行安装即</div>

	标签：<a href="http://www.zfkun.com/tag/vmware" title="vmware" rel="tag">vmware</a>, <a href="http://www.zfkun.com/tag/windows7" title="windows7" rel="tag">windows7</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/277.html" title="微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址 (2011 年 06 月 25 日)" data-comment="1">微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址</a></li>
	<li><a href="http://www.zfkun.com/51.html" title="windows7 7068 X86三版本及下载 (2010 年 01 月 16 日)" data-comment="0">windows7 7068 X86三版本及下载</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/232.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fastcgi_finish_request提速程序执行</title>
		<link>http://www.zfkun.com/229.html</link>
		<comments>http://www.zfkun.com/229.html#comments</comments>
		<pubDate>Wed, 13 Apr 2011 02:56:14 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[fastcgi_finish_request]]></category>
		<category><![CDATA[异步]]></category>
		<category><![CDATA[提速]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=229</guid>
		<description><![CDATA[当PHP运行在FastCGI模式时，PHP FPM提供了一个名为fastcgi_finish_request的方法。 <a href="http://www.zfkun.com/229.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>当PHP运行在FastCGI模式时，<a href="http://php-fpm.org/" target="_blank">PHP FPM</a>提供了一个名为<a href="http://php-fpm.org/wiki/Features#fastcgi_finish_request.28.29" target="_blank">fastcgi_finish_request</a>的方法。</p>
<p>不错的提速函数方法，针对页面生成完成后的任务执行可使用此方法。</p>
<p>例子：</p>
<pre name="code" class="php">&lt;?php
echo '页面生成内容';
fastcgi_finish_request();
echo '看不到的生成内容，因为页面生成早已结束';
file_put_contents('test.txt', '页面虽已结束，但是任务仍旧正常继续运行');
?&gt;</pre>
<p>&nbsp;</p>
<p>通过浏览器访问此PHP，由结果可说明在调用fastcgi_finish_request后，客户端响应就已经结束，但与此同时PHP剩余脚本代码却继续运行至最后。</p>
<p>&nbsp;</p>
<p>合理利用这个特性可以大大提升用户体验及性能：</p>
<pre name="code" class="php">&lt;?php
echo '给用户看的内容';
file_put_contents('test.txt', "页面生成完毕", FILE_APPEND);
fastcgi_finish_request();
sleep(5);
file_put_contents('test.txt', "任务A执行\n", FILE_APPEND);
sleep(5);
file_put_contents('test.txt', "任务B执行\n", FILE_APPEND);
?&gt;</pre>
<p>如预期，浏览时页面没有被堵塞，显示“给用户看的内容”并生成一条LOG记录后，请求就结束了。<br />
而剩余的任务A 和 B，却依旧照常执行。</p>

	标签：<a href="http://www.zfkun.com/tag/fastcgi_finish_request" title="fastcgi_finish_request" rel="tag">fastcgi_finish_request</a>, <a href="http://www.zfkun.com/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.zfkun.com/tag/%e5%bc%82%e6%ad%a5" title="异步" rel="tag">异步</a>, <a href="http://www.zfkun.com/tag/%e6%8f%90%e9%80%9f" title="提速" rel="tag">提速</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/135.html" title="挑战 hax.tor.hu 申请带ssh的免费php+mysql空间 (2010 年 03 月 19 日)" data-comment="0">挑战 hax.tor.hu 申请带ssh的免费php+mysql空间</a></li>
	<li><a href="http://www.zfkun.com/39.html" title="基于OpenCV的PHP图像人脸识别技术 (2010 年 01 月 16 日)" data-comment="0">基于OpenCV的PHP图像人脸识别技术</a></li>
	<li><a href="http://www.zfkun.com/223.html" title="动态生成windows快捷方式文件 (2011 年 04 月 02 日)" data-comment="0">动态生成windows快捷方式文件</a></li>
	<li><a href="http://www.zfkun.com/417.html" title="WordPress Rewrite SEO 之404方式折腾笔记 (2011 年 07 月 17 日)" data-comment="1">WordPress Rewrite SEO 之404方式折腾笔记</a></li>
	<li><a href="http://www.zfkun.com/102.html" title="Windows 下 Nginx + PHP5 的安装与配置 (2010 年 01 月 28 日)" data-comment="0">Windows 下 Nginx + PHP5 的安装与配置</a></li>
	<li><a href="http://www.zfkun.com/35.html" title="PHP CURL函数库 (2010 年 01 月 16 日)" data-comment="0">PHP CURL函数库</a></li>
	<li><a href="http://www.zfkun.com/95.html" title="Nginx 0.8.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器（第5版） (2010 年 01 月 28 日)" data-comment="0">Nginx 0.8.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器（第5版）</a></li>
	<li><a href="http://www.zfkun.com/21.html" title="iconv 方法使用 (2010 年 01 月 16 日)" data-comment="0">iconv 方法使用</a></li>
	<li><a href="http://www.zfkun.com/33.html" title="domdocument::domdocument() expects at least 1 parameter解决办法 (2010 年 01 月 16 日)" data-comment="0">domdocument::domdocument() expects at least 1 parameter解决办法</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/229.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows7下搭建Node.js环境</title>
		<link>http://www.zfkun.com/226.html</link>
		<comments>http://www.zfkun.com/226.html#comments</comments>
		<pubDate>Wed, 06 Apr 2011 08:34:18 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[win7]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=226</guid>
		<description><![CDATA[1. 下载并安装Cygwin 及Node.js安装依赖的附加组件 cygwin下载:  http://cygwin.com/setup.exe (下载点最好选择台湾或日本的临近点，速度快) 附加组件选择: Devel : gcc-g++:    C++ compiler gcc-mingw-g++:   Mingw32 support headers and libraries for GCC C++ gcc4-g++:    G++ subpackage git:   Fast Version Control System – core files  (github方式下载时用) make:   The &#8230; <a href="http://www.zfkun.com/226.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1. 下载并安装Cygwin 及Node.js安装依赖的附加组件</p>
<p>cygwin下载:  <a title="http://cygwin.com/setup.exe" href="http://cygwin.com/setup.exe">http://cygwin.com/setup.exe</a> (下载点最好选择台湾或日本的临近点，速度快)</p>
<p>附加组件选择:</p>
<p>Devel :<br />
<strong> gcc-g++</strong>:    C++ compiler<br />
<strong> gcc-mingw-g++</strong>:   Mingw32 support headers and libraries for GCC C++<br />
<strong>gcc4-g++</strong>:    G++ subpackage<br />
<strong>git</strong>:   Fast Version Control System – core files  (github方式下载时用)<br />
<strong>make</strong>:   The GNU version of the &#8216;make&#8217; utility<br />
<strong>openssl-devel</strong>:   The OpenSSL development environment<br />
<strong>pkg-config</strong>:   A utility used to retrieve information about installed libraries<br />
<strong>zlib-devel</strong>:   The zlib compression/decompression library (development)</p>
<p>Editor:<br />
<strong> vim</strong>:   Vi IMproved &#8211; enhanced vi editor</p>
<p>Python:<br />
全部</p>
<p>Web:<br />
<strong>wget</strong>:   Utility to retrieve files from the WWW via HTTP and FTP<br />
<strong>curl</strong>:   Multi-protocol file transfer command-line tool</p>
<p>2.  由于操作系统为 windows 7 (Windows Vista以后版本)，需要在ash模式下执行rebaseall才能保证 node.js的编译通过</p>
<p>a. 进入 cygwin安装目录/bin/<br />
b. 运行ash.exe<br />
c.  执行./rebaseall -v 命令<br />
d. 正常情况下就OK通过，而我编译出现错误，提示系统临时目录无写入 权限<br />
e.  我编译出现错误，提示系统临时目录无写入权限，遂，手动修改了 rebaseall 文件的 83行处代码，如下：</p>
<pre class="sh"># TmpDir="${TMP:-${TEMP:-/tmp}}"
TmpDir="D:/servers/cygwin_local/temp"</pre>
<p>3. 启动cygwin下载 node.js源码编译并安装</p>
<pre class="shell">$ cd /
$ git clone git://github.com/joyent/node.git
$ cd node
$ ./configure
$ make
$ make install</pre>
<p>4.  设置DNS</p>
<p>cygwin内部使用windows的DNS查询，且node.js采用c-ares函数库，而c-ares函数库读取的  /etc/resolv.conf 里的nameserver配置，</p>
<p>所以需要手动建立 /etc/resolv.conf , 并增加以下nameserver 来让node.js执行网络操作时正常运行：</p>
<pre class="shell">$ vi /ect/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4</pre>
<p>5. 测试node.js环境</p>
<p>查看下 node安装信息：</p>
<pre class="shell">node --version</pre>
<p>写个简单的 Http Server来测试下node.js环境，保存一下代码为/worksapce/test.js：</p>
<pre class="js">var http = require('http'), port = 8888;

http.createServer(function (request, response) {
response.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8;' });
response.end('&lt;h1&gt;你好世界！&lt;/h1&gt;');
}).listen(port);

console.log('服务已启动 http://127.0.0.1:' + port + '/');
$ node /workspace/test.js</pre>
<p>开打浏览器访问 http://127.0.0.1:8888  查看效果</p>

	标签：<a href="http://www.zfkun.com/tag/cygwin" title="cygwin" rel="tag">cygwin</a>, <a href="http://www.zfkun.com/tag/js" title="js" rel="tag">js</a>, <a href="http://www.zfkun.com/tag/node" title="node" rel="tag">node</a>, <a href="http://www.zfkun.com/tag/nodejs" title="nodejs" rel="tag">nodejs</a>, <a href="http://www.zfkun.com/tag/win7" title="win7" rel="tag">win7</a>, <a href="http://www.zfkun.com/tag/windows" title="windows" rel="tag">windows</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/51.html" title="windows7 7068 X86三版本及下载 (2010 年 01 月 16 日)" data-comment="0">windows7 7068 X86三版本及下载</a></li>
	<li><a href="http://www.zfkun.com/449.html" title="Thinkpad 全系列驱动程序官方安装光盘下载 (2011 年 11 月 17 日)" data-comment="0">Thinkpad 全系列驱动程序官方安装光盘下载</a></li>
	<li><a href="http://www.zfkun.com/154.html" title="随机颜色 (2011 年 01 月 12 日)" data-comment="0">随机颜色</a></li>
	<li><a href="http://www.zfkun.com/59.html" title="腾讯TT、遨游浏览器检测 (2010 年 01 月 16 日)" data-comment="0">腾讯TT、遨游浏览器检测</a></li>
	<li><a href="http://www.zfkun.com/55.html" title="绝对震撼!10款动感图片展示js代码 (2010 年 01 月 16 日)" data-comment="0">绝对震撼!10款动感图片展示js代码</a></li>
	<li><a href="http://www.zfkun.com/277.html" title="微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址 (2011 年 06 月 25 日)" data-comment="1">微软MSDN windows 7 with sp1 中英文各版本x86x64下载地址</a></li>
	<li><a href="http://www.zfkun.com/176.html" title="原生JSON.parse解析异常问题 (2011 年 03 月 18 日)" data-comment="0">原生JSON.parse解析异常问题</a></li>
	<li><a href="http://www.zfkun.com/147.html" title="前端资源文件缓存清除一法 (2010 年 11 月 25 日)" data-comment="0">前端资源文件缓存清除一法</a></li>
	<li><a href="http://www.zfkun.com/394.html" title="[转]利用跨域资源共享（CORS）实现ajax跨域调用 (2011 年 07 月 15 日)" data-comment="0">[转]利用跨域资源共享（CORS）实现ajax跨域调用</a></li>
	<li><a href="http://www.zfkun.com/80.html" title="[转]Google Closure: 糟糕的JavaScript (2010 年 01 月 19 日)" data-comment="0">[转]Google Closure: 糟糕的JavaScript</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/226.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>动态生成windows快捷方式文件</title>
		<link>http://www.zfkun.com/223.html</link>
		<comments>http://www.zfkun.com/223.html#comments</comments>
		<pubDate>Sat, 02 Apr 2011 07:52:01 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[shortcut]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[快捷方式]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=223</guid>
		<description><![CDATA[近期改版中涉及到此小需求。就看了下，其实挺简单，这里就做个简单记录，不需要分析了。简单的使用了PHP语言（其他也一样），扩展性很容易做（稍微做点可变处理就行），所以就没去刻意做，写死效率最高 - -。 <a href="http://www.zfkun.com/223.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>近期改版中涉及到此小需求。就看了下，其实挺简单，这里就做个简单记录，不需要分析了。</p>
<p>简单的使用了PHP语言（其他也一样），扩展性很容易做（稍微做点可变处理就行），所以就没去刻意做，写死效率最高 &#8211; -。</p>
<pre name="code" class="php">&lt;?php
$fileName = iconv("utf-8", "GBK", "7k7k小游戏");
header("Content-Type:application/octet-stream");
header("Content-Disposition:attachment;filename={$fileName}.url");
?&gt;[default]
BASEURL=http://www.7k7k.com/?ADTAG=deskto.home
[InternetShortcut]
URL=http://www.7k7k.com/?ADTAG=desktop.home
IconFile=http://www.7k7k.com/favicon.ico
IconIndex=1
HotKey=0
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2</pre>

	标签：<a href="http://www.zfkun.com/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.zfkun.com/tag/shortcut" title="shortcut" rel="tag">shortcut</a>, <a href="http://www.zfkun.com/tag/url" title="url" rel="tag">url</a>, <a href="http://www.zfkun.com/tag/%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f" title="快捷方式" rel="tag">快捷方式</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/135.html" title="挑战 hax.tor.hu 申请带ssh的免费php+mysql空间 (2010 年 03 月 19 日)" data-comment="0">挑战 hax.tor.hu 申请带ssh的免费php+mysql空间</a></li>
	<li><a href="http://www.zfkun.com/39.html" title="基于OpenCV的PHP图像人脸识别技术 (2010 年 01 月 16 日)" data-comment="0">基于OpenCV的PHP图像人脸识别技术</a></li>
	<li><a href="http://www.zfkun.com/417.html" title="WordPress Rewrite SEO 之404方式折腾笔记 (2011 年 07 月 17 日)" data-comment="1">WordPress Rewrite SEO 之404方式折腾笔记</a></li>
	<li><a href="http://www.zfkun.com/102.html" title="Windows 下 Nginx + PHP5 的安装与配置 (2010 年 01 月 28 日)" data-comment="0">Windows 下 Nginx + PHP5 的安装与配置</a></li>
	<li><a href="http://www.zfkun.com/35.html" title="PHP CURL函数库 (2010 年 01 月 16 日)" data-comment="0">PHP CURL函数库</a></li>
	<li><a href="http://www.zfkun.com/95.html" title="Nginx 0.8.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器（第5版） (2010 年 01 月 28 日)" data-comment="0">Nginx 0.8.x + PHP 5.2.10（FastCGI）搭建胜过Apache十倍的Web服务器（第5版）</a></li>
	<li><a href="http://www.zfkun.com/21.html" title="iconv 方法使用 (2010 年 01 月 16 日)" data-comment="0">iconv 方法使用</a></li>
	<li><a href="http://www.zfkun.com/229.html" title="fastcgi_finish_request提速程序执行 (2011 年 04 月 13 日)" data-comment="1">fastcgi_finish_request提速程序执行</a></li>
	<li><a href="http://www.zfkun.com/33.html" title="domdocument::domdocument() expects at least 1 parameter解决办法 (2010 年 01 月 16 日)" data-comment="0">domdocument::domdocument() expects at least 1 parameter解决办法</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/223.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 canvas 初级入门教程</title>
		<link>http://www.zfkun.com/220.html</link>
		<comments>http://www.zfkun.com/220.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 11:38:24 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=220</guid>
		<description><![CDATA[HTML5 canvas 即HTML5画布，是一个现代浏览器都支持的HTML5非插件绘图的功能，本文将展示如何通过HTML5 canvas API操作canvas元素、绘制图形、改变绘图颜色以及删除图形，让我们开始进入这很酷的新技术的短暂旅行吧。 <a href="http://www.zfkun.com/220.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>HTML5 canvas 即HTML5画布，是一个现代浏览器都支持的HTML5非插件绘图的功能，本文将展示如何通过HTML5 canvas API操作canvas元素、绘制图形、改变绘图颜色以及删除图形，让我们开始进入这很酷的新技术的短暂旅行吧。</p>
<h2>canvas元素简介</h2>
<p>使用canvas元素相当简单，它只是一个单纯的HTML标签，外加宽高两个特性。</p>
<pre name="code" class="html">&lt;canvas width="500" height="500"&gt;
&lt;!-- 在这里插入向后兼容的内容，不支持canvas的浏览器可以解析和显示 --&gt;
&lt;/canvas&gt;</pre>
<p>上面的代码在页面中插入了一个透明的画布，canvas元素内部的内容可以在不支持canvas功能的浏览器下显示你想给你的用户提供的信息，联想下&lt;noscript&gt;元素就可以。</p>
<h2>浏览器支持</h2>
<p>很重要的一点就是浏览器对canvas的支持还是相当不错的，所有现代浏览器都支持它，包括最新版的IE9：</p>
<blockquote><p>Internet Explorer 9.0+<br />
Safari 3.0+<br />
Firefox 3.0+<br />
Chrome 3.0+<br />
Opera 10.0+<br />
iOS 1.0+<br />
Android 1.0+</p></blockquote>
<p>有趣的是，你可以在IE8以及更低版本的IE浏览器下使用canvas功能，借助<a title="ExplorerCanas" href="http://code.google.com/p/explorercanvas/" target="_blank">ExplorerCanvas 插件</a>。</p>
<h2>画布尺寸</h2>
<p>当定义canvas元素的尺寸时，最好通过HTML设置它的width和height特性，因为通过CSS设置宽高会导致画布按比例缩放到你设置的值，这背后有它的逻辑原因：在canvas元素的内部存在一个名为2d渲染环境（2d redering context）的对象，所以，通过CSS设置画布尺寸会引起奇怪的效果。</p>
<h2>探索2d 渲染环境</h2>
<p>我们上面提到的canvas元素只是canvas功能的一部分，另一部分是2d渲染环境，它可以让你实现很酷的看得到的东西。</p>
<p>需要完全理清的是：当你使用canvas，你不是在canvas元素上画图，事实上你是在canvas元素内部的2d渲染环境上。</p>
<h2>坐标系统</h2>
<p>如果你曾经使用过2d绘图编程语言（比如ActionScript、Processing等），你应该会了解基于屏幕（screen-based）的坐标系统。canvas内部的2d渲染环境并没有什么不同之处，它采用标准的笛卡尔坐标系统，原点位于屏幕左上角，向右移动会增加x坐标的值，向下移动会增加y坐标的值，很容易理解。</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444647417_e731191271.jpg" target="_blank"><img class="aligncenter size-full wp-image-354" title="canvas unit" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444647417_e731191271.jpg" alt="" width="500" height="353" /></a></p>
<p>通常坐标系统的单位是屏幕的1像素。</p>
<h2>操作2d渲染环境</h2>
<p>需要利用Javascript提供的API来获取2d渲染环境对象，该方法为：getContext()，看下简单的例子：</p>
<pre name="code" class="html">&lt;canvas id="csser-com-Canvas" width="500" height="500"&gt;
   &lt;!-- 向后兼容的内容 --&gt;
&lt;/canvas&gt;
&lt;script&gt;
var canvas = document.getElementById("csser-com-Canvas");
var c = canvas.getContext("2d");
&lt;/script&gt;</pre>
<p>通过调用canvas对象的getContext()方法，c变量就包含了指向2d渲染环境的引用，这意味着你现在已经完成了在画布上绘图的一切准备，接下来可以开始绘图了。</p>
<h2>绘制矩形</h2>
<p>获得了2d渲染环境对象，就可以通过调用API提供的大量方法来进行绘图了，一个最基本的方法就是fillRect()，通过它可以绘制一个填充颜色的矩形（颜色默认值为黑色）。</p>
<p>在c变量的下面增加以下代码：</p>
<pre name="code" class="js">c.fillRect(0, 0, 50, 50);</pre>
<p>这将在画布左上角绘制绘制一个黑色背景的正方形：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673295_e0f869e948_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-355" title="canvas fillRect" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673295_e0f869e948_m.jpg" alt="canvas fillRect" width="58" height="60" /></a></p>
<p>在调用fillRect()方法时传入了4个参数：</p>
<ul>
<li>第一个是基于原点的x坐标位置</li>
<li>第二个是基于原点的y坐标位置</li>
<li>第三个是宽度</li>
<li>第四个是高度</li>
</ul>
<p>fillRect的伪代码看起来应该像这个样子：</p>
<pre name="code" class="js">c.fillRect(x, y, width, height);</pre>
<p>很酷的是，不仅可以绘制填充的矩形，你还可以绘制线框矩形，使用strokeRect()方法，绘制四周产生描边效果的矩形，如：</p>
<pre name="code" class="js">c.strokeRect(50, 50, 100, 100);</pre>
<p>strokeRect的参数与fillRect是一致的，绘制的结果如下：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673313_94f0bb9556_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-356" title="canvas strokeRect" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673313_94f0bb9556_m.jpg" alt="canvas strokeRect" width="160" height="160" /></a></p>
<p>利用canvas绘图，简单、优美，所有的方法都很易懂，但是当放在一起使用可以让你画出很漂亮的图形。</p>
<h2>绘制路径</h2>
<p>矩形是唯一一个可以通过单个API方法绘制的图形，先把它放在一边，我们来学习下路径（Paths）绘制。使用路径，可以绘制线条、连续的曲线以及复合图形。</p>
<p>绘制一个简单的路径需要利用一些AIP方法：</p>
<blockquote><p>beginPath 开始一个新路径<br />
moveTo 移动路径的绘图起点<br />
lineTo 从moveTo定义的点开始绘制连续的路径，或者从上一次的lineTo的终点开始绘制。<br />
closePath 连接最后的点和最初的点并关闭路径绘制<br />
fill 用颜色填充路径<br />
stroke 描变路径</p></blockquote>
<p>尝试执行下面的代码：</p>
<pre name="code" class="js">c.beginPath();
c.moveTo(50, 50);
c.lineTo(50, 250);
c.lineTo(250, 250);
c.closePath;
c.fill();</pre>
<p>执行结果为：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5445275668_000b7c58f1_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-357" title="canvas paths" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5445275668_000b7c58f1_m.jpg" alt="canvas paths" width="208" height="207" /></a></p>
<p>你可以用同样的方法绘制你希望的图形，canvas还包含更高级的路径绘制，比如圆弧（可以绘制圆形）和贝塞尔曲线（用于绘制很酷的曲线效果），总之，绘制路径要比绘制矩形复杂的多。</p>
<h2>改变颜色</h2>
<p>到目前为止，我们的示例所绘制的都是填充或描边的黑色，canvas也提供了一些属性用于改变绘制图形的颜色，它们是fillStyle和strokeStyle，它们的语法都是可以自解释的，所以我们直接来改变一个矩形的填充颜色：</p>
<pre name="code" class="js">c.fillStyle = "rgb(255, 0, 0)";
c.fillRect(50, 50, 100, 100);</pre>
<p>结果：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5445275680_58dc82498b_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-358" title="canvas fillStyle" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5445275680_58dc82498b_m.jpg" alt="canvas fillStyle" width="107" height="107" /></a></p>
<p>或者，你可以改变描边的颜色：</p>
<pre name="code" class="js">c.strokeStyle = "rgb(255, 0, 0)";
c.strokeRect(50, 50, 100, 100);</pre>
<p>结果：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5445275718_085b9c4e07_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-359" title="canvas strokeStyle" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5445275718_085b9c4e07_m.jpg" alt="canvas strokeStyle" width="109" height="109" /></a></p>
<p>fillStyle和strokeStyle属性很漂亮的一点就是，它们都支持普通CSS颜色值，这意味着你可以使用RGB、RGBA、HSA、颜色名称以及十六进制颜色值。</p>
<p>还有一点需要指出的是，改变画布中的颜色值不会影响已经绘制的任何图形，例如，如果你绘制了一个黑色的矩形，然后设置填充为红色，接着绘制了另一个矩形，这时第一个矩形仍然为黑色。</p>
<h2>改变线宽</h2>
<p>除了可以改变颜色，还可以利用lineWidth属性改变描边线条的宽度，按照上面的例子，改变线条宽度：</p>
<pre name="code" class="js">c.lineWidth = 20;
c.strokeStyle = "#f00";
c.strokeRect(50, 50, 100, 100);</pre>
<p>结果：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673423_370c8a9c4e_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-360" title="canvas lineWidth" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673423_370c8a9c4e_m.jpg" alt="canvas lineWidth" width="133" height="133" /></a></p>
<p>同样的可以改变路径的线宽：</p>
<pre name="code" class="js">c.lineWidth = 20;
c.beginPath();
c.moveTo(50, 50);
c.lineTo(50, 250);
c.lineTo(250, 250);
c.closePath();
c.stroke();</pre>
<p>结果：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673489_5a79a07697_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-361" title="canvas lineWidth paths" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673489_5a79a07697_m.jpg" alt="canvas lineWidth paths" width="240" height="240" /></a></p>
<p>还有一些其它的改变线条的方式，比如lineCap设置线条的末端，lineJoin设置线条的角。</p>
<h2>删除图形</h2>
<p>最后我们来了解下如何删除已经绘制的图形，删除图形只需Javascript API提供的一个名为clearRect的方法，其原理是使参数指定的矩形区域背景变为透明。</p>
<p>本文示例画布长宽分别为500像素，要想删除整个画布图形，可以这样做：</p>
<pre name="code" class="js">c.fillRect(50, 50, 100, 100);
c.clearRect(0, 0, 500, 500);</pre>
<p>上面的代码执行后，你会什么都看不到，事实上填充的矩形已经绘制，只是瞬间被删除了，所以你看不到它。</p>
<p>如果你不清楚画布的具体宽高，清除整个画布可以这样：</p>
<pre name="code" class="js">c.clearRect(0, 0, canvas.width, canvas.height);</pre>
<h2>删除画布中的区域</h2>
<p>如果你不想删除整个画布的图形，而仅仅删除画布中的一个区域，假如，你绘制了一个黑色的正方形，旁边绘制了一个红色的正方形：</p>
<pre name="code" class="js">c.fillRect(50, 50, 100, 100);
c.fillStyle = "#f00";
c.fillRect(200, 50, 100, 100);</pre>
<p>看起来是这个样子：</p>
<p><a href="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673565_a360d6e213_m.jpg" target="_blank"><img class="aligncenter size-full wp-image-362" title="canvas clearRect" src="http://www.zfkun.com/blog/wp-content/uploads/2011/03/5444673565_a360d6e213_m.jpg" alt="canvas clearRect" width="240" height="104" /></a></p>
<p>接下来你可以通过clearRect删除黑色背景的正方形而只保留红色正方形：</p>
<pre name="code" class="js">c.clearRect(50, 50, 100, 100);</pre>
<p>注意传入clearRect的参数能确保能覆盖要被删除的图形的区域。</p>
<p>原文：<a href="http://net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-introducing-canvas/" target="_blank">Canvas From Scratch: Introducing Canvas</a></p>

	标签：<a href="http://www.zfkun.com/tag/api" title="api" rel="tag">api</a>, <a href="http://www.zfkun.com/tag/canvas" title="canvas" rel="tag">canvas</a>, <a href="http://www.zfkun.com/tag/html" title="html" rel="tag">html</a>, <a href="http://www.zfkun.com/tag/html5" title="html5" rel="tag">html5</a>, <a href="http://www.zfkun.com/tag/js" title="js" rel="tag">js</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/157.html" title="MooTools Upgrade from 1.2 to 1.3 (2011 年 01 月 13 日)" data-comment="0">MooTools Upgrade from 1.2 to 1.3</a></li>
	<li><a href="http://www.zfkun.com/html5" title="HTML5 (2011 年 06 月 03 日)" data-comment="0">HTML5</a></li>
	<li><a href="http://www.zfkun.com/154.html" title="随机颜色 (2011 年 01 月 12 日)" data-comment="0">随机颜色</a></li>
	<li><a href="http://www.zfkun.com/59.html" title="腾讯TT、遨游浏览器检测 (2010 年 01 月 16 日)" data-comment="0">腾讯TT、遨游浏览器检测</a></li>
	<li><a href="http://www.zfkun.com/55.html" title="绝对震撼!10款动感图片展示js代码 (2010 年 01 月 16 日)" data-comment="0">绝对震撼!10款动感图片展示js代码</a></li>
	<li><a href="http://www.zfkun.com/176.html" title="原生JSON.parse解析异常问题 (2011 年 03 月 18 日)" data-comment="0">原生JSON.parse解析异常问题</a></li>
	<li><a href="http://www.zfkun.com/147.html" title="前端资源文件缓存清除一法 (2010 年 11 月 25 日)" data-comment="0">前端资源文件缓存清除一法</a></li>
	<li><a href="http://www.zfkun.com/394.html" title="[转]利用跨域资源共享（CORS）实现ajax跨域调用 (2011 年 07 月 15 日)" data-comment="0">[转]利用跨域资源共享（CORS）实现ajax跨域调用</a></li>
	<li><a href="http://www.zfkun.com/80.html" title="[转]Google Closure: 糟糕的JavaScript (2010 年 01 月 19 日)" data-comment="0">[转]Google Closure: 糟糕的JavaScript</a></li>
	<li><a href="http://www.zfkun.com/226.html" title="Windows7下搭建Node.js环境 (2011 年 04 月 06 日)" data-comment="1">Windows7下搭建Node.js环境</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/220.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何检测HTML表单已经发生改变</title>
		<link>http://www.zfkun.com/218.html</link>
		<comments>http://www.zfkun.com/218.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 11:36:46 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[defaultChecked]]></category>
		<category><![CDATA[defaultSelected]]></category>
		<category><![CDATA[defaultValue]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[检测]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=218</guid>
		<description><![CDATA[表单是Web应用不可缺少的功能，它是服务器端与浏览器端数据交换的最基本的方法。你应该已经读过很多关于HTML5和Javascript的表单标签和数据验证的文章，今天我们来讨论下如何检查表单数据是否被改变了。 <a href="http://www.zfkun.com/218.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>表单是Web应用不可缺少的功能，它是服务器端与浏览器端数据交换的最基本的方法。你应该已经读过很多关于HTML5和Javascript的表单标签和数据验证的文章，今天我们来讨论下如何检查表单数据是否被改变了。</p>
<h2>为什么要检查表单数据被改变？</h2>
<p>有很多理由需要检测表单数据是否有修改，让我们来看一个很常见的场景，如果用户修改了一个或多个表单域的值，当用户跳离当前页面时，你会给出用户类似“你的修改尚未保存”的提示。你甚至可以给出用户是否保存数据（比如Ajax）的选项。另外的情况，如果表单项没有被修改，这时略去冗余的表单验证和数据发送将会增强用户体验。</p>
<h2>Javascript onchange事件</h2>
<p>为HTML表单元素添加onchange事件处理器是一种可行的方法，这也是用的最多的，但是onchange的实现有一些问题存在：</p>
<ol>
<li>如果用户改变表单域的值，然后再修改回原始值，程序仍将认为表单的修改已经发生。</li>
<li>如果表单项的值是通过Javascript动态修改的，onchange事件不会被自动触发。</li>
<li>为每一个表单元素增加onchange事件会引起性能问题，特别是较大的表单。</li>
<li>如果将表单元素从DOM中增加或移除，你需要相应的注册或移除事件侦听。</li>
<li>checkbox和radio的onchange事件在某些浏览器下不能按预期工作（你应该知道是哪个浏览器）。</li>
<li>除了onchange，还有更简单有效的方案。</li>
</ol>
<h2>比较默认值</h2>
<p>幸运的是，我们不需要为了复杂的事件处理而写过多的废话，每个表单元素都有与该对象相关联的默认值，即页面加载完后表单控件显示或者默认的数据值，该值可与用户操作后的值进行对比以得出表单域的值是否发生了改变。</p>
<p>有点麻烦的是，不同类型的表单元素的默认值属性（properties）不尽相同（做些判断好了，并不影响什么）</p>
<h2>input和textarea</h2>
<p>让我们从简单的元素开始，所有的textarea对象和除了checkbox、radio之外的 input对象都有一个名为defaultValue的属性，我们可以对比文本域的当前值和默认值是否相同以决定文本域的修改是否发生。</p>
<pre>&lt;!-- name input --&gt;
&lt;input type="text" id="name" name="name" value="www.csser.com" /&gt;
&lt;script&gt;
var name = document.getElementById("name");
if (n.value != n.defaultValue) alert("#name has changed");
&lt;/script&gt;</pre>
<p><strong>小提示</strong>：HTML4或XHTML中，文本域类型为text、hidden、password或file的对象有defaultValue属性。HTML5新的表单类型也有defaultValue属性并且可以用相同的方式检测默认值是否改变过，这些新表单元素包含email、tel、url、range、date、color和search。</p>
<h2>checkbox和radio</h2>
<p>checkbox和radio对象有一个defaultChecked属性，其取值为true或false，我们可以通过对比当前选中状态与默认选中状态进行比较，如：</p>
<pre>&lt;!-- newsletter opt-in --&gt;
&lt;input type="checkbox" id="optin" name="optin" checked="checked" /&gt;
&lt;script&gt;
var optin = document.getElementById("optin");
if (n.checked != n.defaultChecked) alert("#optin has changed by csser");
&lt;/script&gt;</pre>
<p>注意checkbox和radio对象也有defaultValue属性，但它仅被分配给元素的value特性（attribute）而不能标识当前的选中状态。</p>
<h2>下拉列表select</h2>
<p>select控件通常用于提供一个下拉列表供用户选择，相比上面提到的控件，select有一点复杂，select元素本身并不具有默认值属性，它的默认值存在于其option元素集合内。当页面加载完毕，默认选中的option拥有selected特性，也就是这个option对象拥有defaultSelected属性且值为true。</p>
<p>我们可以从select节点的selectedIndex属性取得当前选中的option的索引值，如果该option对象的defaultSelected属性为false，那么select控件的值一定被修改了，如：</p>
<pre>&lt;!-- job title select box --&gt;
&lt;select id="job" name="job"&gt;
   &lt;option&gt;web designer&lt;/option&gt;
   &lt;option selected="selected"&gt;csser.com developer&lt;/option&gt;
   &lt;option&gt;graphic artist&lt;/option&gt;
   &lt;option&gt;IT professional&lt;/option&gt;
   &lt;option&gt;other&lt;/option&gt;
&lt;/select&gt;
&lt;script&gt;
var job = document.getElementById("job");
if (!job.options[job.selectedIndex].defaultSelected) alert("#job has changed");
&lt;/script&gt;</pre>
<p>上面的代码在单选下拉列表并且有一个option拥有selected特性时运行正常，但我们需要留意一些陷阱：</p>
<ol>
<li>如果没有option被赋予selected特性，浏览器会将第一个设为默认选中，但其defaultSelected属性值却为false</li>
<li>如果两个或更多option拥有selected特性（这不合逻辑，但是可能的），每个option都会拥有defaultSelected属性且值为true，但是浏览器仅能得到最后一个的默认值。</li>
<li>多重选择控件允许用户选择任意个option：</li>
</ol>
<pre>&lt;!-- skills multi-select box --&gt;
&lt;select id="skills" name="skills" multiple="multiple"&gt;
   &lt;option selected="selected"&gt;HTML&lt;/option&gt;
   &lt;option selected="selected"&gt;CSSer&lt;/option&gt;
   &lt;option selected="selected"&gt;JavaScript&lt;/option&gt;
   &lt;option&gt;PHP&lt;/option&gt;
&lt;/select&gt;</pre>
<p>多选下拉列表并不常用，因为用多个checkbox可以提供更友好的界面，但是，如果使用多选下拉列表，多个option具有defaultSelected属性且值为true，select节点的selectedIndex属性已经无效，所以需要循环每一个option才能判断其selected属性是否与其defaultSelected属性相匹配。下面的代码可以解决这个问题：</p>
<pre>var  skills = document.getElementById("skills"),c = false, def = 0, o, ol, opt;
for (o = 0, ol = n.options.length; o &lt; ol; o++) {
   opt = skills.options[o];
   c = c || (opt.selected != opt.defaultSelected);
   if (opt.defaultSelected) def = o;
}
if (c &amp;&amp; !skills.multiple) c = (def != skills.selectedIndex);
if (c) alert("#skills has changed");</pre>
<p>上面这些就是本文介绍的如何检测一个表单值是否改变的内容。</p>
<p>&nbsp;</p>
<p>原文：<a href="http://blogs.sitepoint.com/2011/02/18/detect-html-form-changes/" target="_blank">How to Check That an HTML Form Has Been Changed</a></p>

	标签：<a href="http://www.zfkun.com/tag/change" title="change" rel="tag">change</a>, <a href="http://www.zfkun.com/tag/defaultchecked" title="defaultChecked" rel="tag">defaultChecked</a>, <a href="http://www.zfkun.com/tag/defaultselected" title="defaultSelected" rel="tag">defaultSelected</a>, <a href="http://www.zfkun.com/tag/defaultvalue" title="defaultValue" rel="tag">defaultValue</a>, <a href="http://www.zfkun.com/tag/form" title="form" rel="tag">form</a>, <a href="http://www.zfkun.com/tag/%e6%a3%80%e6%b5%8b" title="检测" rel="tag">检测</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/59.html" title="腾讯TT、遨游浏览器检测 (2010 年 01 月 16 日)" data-comment="0">腾讯TT、遨游浏览器检测</a></li>
	<li><a href="http://www.zfkun.com/216.html" title="Javascript浏览器另类探测技巧 (2011 年 03 月 20 日)" data-comment="0">Javascript浏览器另类探测技巧</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/218.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript浏览器另类探测技巧</title>
		<link>http://www.zfkun.com/216.html</link>
		<comments>http://www.zfkun.com/216.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 11:22:34 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[detector]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[检测]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=216</guid>
		<description><![CDATA[下面是一些另类的但挺高效的浏览器探测技巧，主要利用了各浏览器的私有特征完成。 <a href="http://www.zfkun.com/216.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h1><span style="font-size: x-small;"><span class="Apple-style-span" style="font-weight: normal;">下面是一些另类的但挺高效的浏览器探测技巧，主要利用了各浏览器的私有特征完成。</span></span></h1>
<p>进入正题：</p>
<pre name="code" class="js">//Firefox detector 2/3 by DoctorDan(slackers论坛)
FF=/a/[-1]=='a'
//Firefox 3
FF3=(function x(){})[-5]=='x'
//Firefox 2
FF2=(function x(){})[-6]=='x'
//IE
IE='\v'=='v'
//Safari
Saf=/a/.__proto__=='//'
//Chrome
Chr=/source/.test((/a/.toString+''))
//Opera by me
Op=/^function \(/.test([].sort)
//IE6
try {IE6=@cc_on @_jscript_version &lt;= 5.7&amp;&amp;@_jscript_build&lt;10000} catch(e){IE6=false;}
</pre>
<h3>整合到一行：</h3>
<pre name="code" class="js">B=(function x(){})[-5]=='x'?'FF3':(function x(){})[-6]=='x'?'FF2':/a/</pre>
<p>原文链接:       <a href="http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/" target="_blank">Detecting browsers javascript hacks</a></p>

	标签：<a href="http://www.zfkun.com/tag/browser" title="browser" rel="tag">browser</a>, <a href="http://www.zfkun.com/tag/detector" title="detector" rel="tag">detector</a>, <a href="http://www.zfkun.com/tag/hack" title="hack" rel="tag">hack</a>, <a href="http://www.zfkun.com/tag/javascript" title="JavaScript" rel="tag">JavaScript</a>, <a href="http://www.zfkun.com/tag/opera" title="opera" rel="tag">opera</a>, <a href="http://www.zfkun.com/tag/safari" title="safari" rel="tag">safari</a>, <a href="http://www.zfkun.com/tag/%e6%a3%80%e6%b5%8b" title="检测" rel="tag">检测</a>, <a href="http://www.zfkun.com/tag/%e6%b5%8f%e8%a7%88%e5%99%a8" title="浏览器" rel="tag">浏览器</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/59.html" title="腾讯TT、遨游浏览器检测 (2010 年 01 月 16 日)" data-comment="0">腾讯TT、遨游浏览器检测</a></li>
	<li><a href="http://www.zfkun.com/218.html" title="如何检测HTML表单已经发生改变 (2011 年 03 月 20 日)" data-comment="0">如何检测HTML表单已经发生改变</a></li>
	<li><a href="http://www.zfkun.com/394.html" title="[转]利用跨域资源共享（CORS）实现ajax跨域调用 (2011 年 07 月 15 日)" data-comment="0">[转]利用跨域资源共享（CORS）实现ajax跨域调用</a></li>
	<li><a href="http://www.zfkun.com/80.html" title="[转]Google Closure: 糟糕的JavaScript (2010 年 01 月 19 日)" data-comment="0">[转]Google Closure: 糟糕的JavaScript</a></li>
	<li><a href="http://www.zfkun.com/417.html" title="WordPress Rewrite SEO 之404方式折腾笔记 (2011 年 07 月 17 日)" data-comment="1">WordPress Rewrite SEO 之404方式折腾笔记</a></li>
	<li><a href="http://www.zfkun.com/388.html" title="window.open() 之句柄保持和重连 (2011 年 07 月 14 日)" data-comment="0">window.open() 之句柄保持和重连</a></li>
	<li><a href="http://www.zfkun.com/366.html" title="Market Enabler &#8211; Android越狱改区利器 (2011 年 07 月 10 日)" data-comment="2">Market Enabler &#8211; Android越狱改区利器</a></li>
	<li><a href="http://www.zfkun.com/211.html" title="JavaScript Memory Leak Detector (v2) (2011 年 03 月 20 日)" data-comment="0">JavaScript Memory Leak Detector (v2)</a></li>
	<li><a href="http://www.zfkun.com/142.html" title="IE6+和FF的CSS Hack (2010 年 04 月 23 日)" data-comment="0">IE6+和FF的CSS Hack</a></li>
	<li><a href="http://www.zfkun.com/182.html" title="add bookmark for ie &#038; ff &#038; opera (2011 年 03 月 20 日)" data-comment="0">add bookmark for ie &#038; ff &#038; opera</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/216.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Memory Leak Detector (v2)</title>
		<link>http://www.zfkun.com/211.html</link>
		<comments>http://www.zfkun.com/211.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 10:58:12 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[资源共享]]></category>
		<category><![CDATA[detector]]></category>
		<category><![CDATA[IEJsLeaksDetector]]></category>
		<category><![CDATA[leak]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[v2]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=211</guid>
		<description><![CDATA[JavaScript Memory Leak Detector (download) is a debugging tool to detect memory leaks and enforce best practices in JavaScript code when working with version of Internet Explorer older than IE8. <a href="http://www.zfkun.com/211.html">阅读全文 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h4>Introduction</h4>
<div>JavaScript Memory Leak Detector (<em><a title="IEJSLeaksDetector2.0.1.1.zip" href="http://joinmicrosofteurope.com/files/IEJSLeaksDetector2.0.1.1.zip">download</a></em>) is a debugging tool to detect memory leaks and enforce best practices in JavaScript code when working with version of Internet Explorer older than IE8.</p>
<p>As described in detail in this <a href="http://msdn.microsoft.com/en-us/library/bb250448.aspx">MSDN article</a> the JScript garbage collector in previous versions of Internet Explorer manages the lifetime of JScript objects but not of DOM objects. As a result, the JScript garbage collector cannot break circular references between DOM objects and JScript objects, and memory leaks may occur.</div>
<div>
<ul>
<li>In IE6, these circular references are broken when the Internet Explorer process terminates (and leaks are very frequent).</li>
<li>In IE7, these circular references are broken when users navigate away from the page.</li>
<li>In IE8 the problem is completely mitigated. (Read <a href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=ie8whitepapers&amp;ReleaseId=578">here</a> for more details).</li>
</ul>
</div>
<p>Programmers who need to support older versions of the Internet Explorer browser should still try to pay attention to programming patterns such as JScript closures, as they could cause memory leaks.</p>
<p>The leak detector works hosting an IE WebBrowser control and intercepting the execution of JavaScript inside IE. It monitors al the DOM elements in the markup of a web document that somehow interact with JavaScript and presents a list of potentially leaked objects to the user, together with information about the scripts loaded in the page and, if possible, a hint to the instruction that may have caused the leak.</p>
<h4>Installation notes</h4>
<p>IEJSLeaksDetector is a plain, native, Windows application and does not require any particular setup (the executable can be just unzipped and run).<br />
It only runs in 32 bit versions of Windows. 64 bits editions are not supported yet.</p>
<p>There are only two installation steps required to make sure that the tool works correctly:</p>
<p>1. The tool requires that the <strong>pdm.dll</strong> script installer is installed in the machine. This DLL is normally installed with any version of Microsoft Visual Studio.In case you are unable to install Visual Studio in the target machine, a simpler way to install pdm.dll is by installing the <strong>Microsoft Script Debugger</strong>, freely downloadable <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2f465be0-94fd-4569-b3c4-dffdf19ccd99&amp;displaylang=en">here</a>.</p>
<p>2. The tool also requires Internet Explorer script debugging to be enabled to work correctly. Verify that the check box “Disable script debugging (Other)” is unchecked, in IE (&#8216;Tools&#8217; menu -&gt; Internet Options -&gt; &#8216;Advanced&#8217; tab -&gt; &#8216;Browsing&#8217; section) as shown in figure.</p>
<p><img src="http://blogs.msdn.com/photos/gpdepix/images/7108465/original.aspx" alt="" width="380" height="474" /></p>
<h4>How to use the tool</h4>
<p>The user can start the memory profiling of a web application navigating to the desired URL. A new tab is opened with a WebBrowser control and a tree view shows all the documents and scripts that compose the current page.<br />
When the user has finished to interact with the page he can click the “Stop” button, which causes the tool to close the control and track possible leaks.<br />
Memory leaks are listed specifying the DOM object&#8217;s type and a list of “attached” JavaScript objects whose circular reference could be the cause of the leak. The tool also shows the call stack correponding to a memory leak, which represents the state of the script at the moment when the JavaScript object was attached to the DOM object. Finally, a script window highlights the exact point in the JavaScript code where the memory leak originated.<br />
More information can be found in the docs enclosed with the <a href="http://joinmicrosofteurope.com/files/IEJSLeaksDetector2.0.1.1.zip">binaries</a>.</p>
<p><img title="Javascript leaks detector" src="http://blogs.msdn.com/photos/gpdepix/images/9856180/original.aspx" alt="Javascript leaks detector" width="985" height="778" /></p>
<p>&nbsp;</p>

	标签：<a href="http://www.zfkun.com/tag/detector" title="detector" rel="tag">detector</a>, <a href="http://www.zfkun.com/tag/iejsleaksdetector" title="IEJsLeaksDetector" rel="tag">IEJsLeaksDetector</a>, <a href="http://www.zfkun.com/tag/leak" title="leak" rel="tag">leak</a>, <a href="http://www.zfkun.com/tag/memory" title="memory" rel="tag">memory</a>, <a href="http://www.zfkun.com/tag/v2" title="v2" rel="tag">v2</a><br />

	<h4>相关推荐</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.zfkun.com/109.html" title="Understanding and Solving Internet Explorer Leak Patterns (2010 年 02 月 28 日)" data-comment="0">Understanding and Solving Internet Explorer Leak Patterns</a></li>
	<li><a href="http://www.zfkun.com/216.html" title="Javascript浏览器另类探测技巧 (2011 年 03 月 20 日)" data-comment="0">Javascript浏览器另类探测技巧</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/211.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>webkit的自定义图片滚动条</title>
		<link>http://www.zfkun.com/208.html</link>
		<comments>http://www.zfkun.com/208.html#comments</comments>
		<pubDate>Sun, 20 Mar 2011 10:51:17 +0000</pubDate>
		<dc:creator>影之迷惑</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[开发编程]]></category>
		<category><![CDATA[scrollbar]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://www.zfkun.com/blog/?p=208</guid>
		<description><![CDATA[&#160; http://trac.webkit.org/export/41842/trunk/LayoutTests/scrollbars/overflow-scrollbar-combinations.html &#160; 非常不错, only webkit的话，还是不错的。 标签：scrollbar, webkit]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://trac.webkit.org/export/41842/trunk/LayoutTests/scrollbars/overflow-scrollbar-combinations.html" target="_blank">http://trac.webkit.org/export/41842/trunk/LayoutTests/scrollbars/overflow-scrollbar-combinations.html</a></p>
<p>&nbsp;</p>
<p>非常不错, only webkit的话，还是不错的。</p>

	标签：<a href="http://www.zfkun.com/tag/scrollbar" title="scrollbar" rel="tag">scrollbar</a>, <a href="http://www.zfkun.com/tag/webkit" title="webkit" rel="tag">webkit</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.zfkun.com/208.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

