<?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>Luin&#039;s Blog &#187; 前端开发</title>
	<atom:link href="http://luinlee.com/category/study-tech/web/jss/feed/" rel="self" type="application/rss+xml" />
	<link>http://luinlee.com</link>
	<description>A long river</description>
	<lastBuildDate>Sat, 07 Aug 2010 04:55:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>IE6的艺术: CSS文件中的中文注释会使样式全部失效</title>
		<link>http://luinlee.com/405/ie6csschinese/</link>
		<comments>http://luinlee.com/405/ie6csschinese/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 15:06:05 +0000</pubDate>
		<dc:creator>Luin</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://luinlee.com/?p=405</guid>
		<description><![CDATA[今天把自己刚做完的网站放到IE6下测试了一下(补充形容词: 心情忐忑不安分守己地)，然后开始做hack，当大部分错误都被改好后，一个很奇怪的问题出现了：某个页面的CSS设置似乎全都失效了。心想IE6在那啥也不至于这么那啥吧，于是经过一段时间的摸索发现是由于CSS文件中含有中文注释，删掉后问题解决(当然把CSS文件存成utf8格式是更好的解决方法)。 下面附上别人写的一篇总结IE6 bug的文章： IE6下的CSS BUG枚举 原文：Ultimate IE6 Cheatsheet: How To Fix 25+ Internet Explorer 6 Bugs 翻译：http://www.vfresh.org/w3c/727 1、终极方法：条件注释 &#60;!&#8211;[if lte IE 6]&#62; 这段文字仅显示在 IE6及IE6以下版本。 &#60;![endif]&#8211;&#62; &#60;!&#8211;[if gte IE 6]&#62; 这段文字仅显示在 IE6及IE6以上版本。 &#60;![endif]&#8211;&#62; &#60;!&#8211;[if gt IE 6]&#62; 这段文字仅显示在 IE6以上版本（不包含IE6）。 &#60;![endif]&#8211;&#62; &#60;!&#8211;[if IE 5.5]&#62; 这段文字仅显示在 IE5.5。 &#60;![endif]&#8211;&#62; &#60;!&#8211;在 IE6及IE6以下版本中加载css&#8211;&#62; &#60;!&#8211;[if lte IE 6]&#62; &#60;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>今天把自己刚做完的网站放到IE6下测试了一下(补充形容词: 心情忐忑不安分守己地)，然后开始做hack，当大部分错误都被改好后，一个很奇怪的问题出现了：某个页面的CSS设置似乎全都失效了。心想IE6在那啥也不至于这么那啥吧，于是经过一段时间的摸索发现是由于CSS文件中含有中文注释，删掉后问题解决(当然把CSS文件存成utf8格式是更好的解决方法)。</p>
<p>下面附上别人写的一篇总结IE6 bug的文章：</p>
<h2>IE6下的CSS BUG枚举</h2>
<blockquote><p>原文：Ultimate IE6 Cheatsheet: How To Fix 25+ Internet Explorer 6 Bugs  翻译：http://www.vfresh.org/w3c/727</p></blockquote>
<p>1、终极方法：条件注释</p>
<blockquote><p>&lt;!&#8211;[if lte IE 6]&gt; 这段文字仅显示在 IE6及IE6以下版本。 &lt;![endif]&#8211;&gt;</p>
<p>&lt;!&#8211;[if gte IE 6]&gt; 这段文字仅显示在 IE6及IE6以上版本。 &lt;![endif]&#8211;&gt;</p>
<p>&lt;!&#8211;[if gt IE 6]&gt; 这段文字仅显示在 IE6以上版本（不包含IE6）。 &lt;![endif]&#8211;&gt;</p>
<p>&lt;!&#8211;[if IE 5.5]&gt; 这段文字仅显示在 IE5.5。 &lt;![endif]&#8211;&gt;</p>
<p>&lt;!&#8211;在 IE6及IE6以下版本中加载css&#8211;&gt;</p>
<p>&lt;!&#8211;[if lte IE 6]&gt; &lt;link type=&#8221;text/css&#8221; rel=&#8221;stylesheet&#8221; href=&#8221;css/ie6.css&#8221; mce_href=&#8221;css/ie6.css&#8221; /&gt;&lt;![endif]&#8211;&gt;</p></blockquote>
<p>缺点是在IE浏览器下可能会增加额外的HTTP请求数。</p>
<p>2、CSS选择器区分</p>
<p>IE6不支持子选择器；先针对IE6使用常规申明CSS选择器，然后再用子选择器针对IE7+及其他浏览器。</p>
<blockquote><p>/* IE6 专用 */</p>
<p>.content {color:red;}</p>
<p>/* 其他浏览器 */</p>
<p>div&gt;p .content {color:blue;} &#8211;&gt;</p></blockquote>
<p>3、PNG半透明图片的问题</p>
<p>虽然可以通过JS等方式解决，但依然存在载入速度等问题，所以，这个在设计上能避免还是尽量避免为好。以达到网站最大优化。</p>
<p>4、IE6下的圆角</p>
<p>IE6不支持CSS3的圆角属性，性价比最高的解决方法就是用图片圆角来替代，或者放弃IE6的圆角。</p>
<p>5、IE6背景闪烁</p>
<p>如果你给链接、按钮用CSS sprites作为背景，你可能会发现在IE6下会有背景图闪烁的现象。造成这个的原因是由于IE6没有将背景图缓存，每次触发hover的时候都会重新加载，可以用JavaScript设置IE6缓存这些图片：</p>
<blockquote><p>document.execCommand(&#8220;BackgroundImageCache&#8221;,false,true);</p></blockquote>
<p>6、最小高度</p>
<p>IE6 不支持min-height属性，但它却认为height就是最小高度。解决方法：使用ie6不支持但其余浏览器支持的属性!important。</p>
<blockquote><p>#container {min-height:200px; height:auto !important; height:200px;}</p></blockquote>
<p>7、最大高度</p>
<blockquote><p>//直接使用ID来改变元素的最大高度<br />
var container = document.getElementById(&#8216;container&#8217;);<br />
container.style.height = (container.scrollHeight &gt; 199) ? &#8220;200px&#8221; : &#8220;auto&#8221;;</p>
<p>//写成函数来运行<br />
function setMaxHeight(elementId, height){<br />
var container = document.getElementById(elementId);<br />
container.style.height = (container.scrollHeight &gt; (height &#8211; 1)) ? height + &#8220;px&#8221; : &#8220;auto&#8221;;<br />
}</p>
<p>//函数示例<br />
setMaxHeight(&#8216;container1&#8242;, 200);<br />
setMaxHeight(&#8216;container2&#8242;, 500);</p></blockquote>
<p>8、100% 高度</p>
<p>在IE6下，如果要给元素定义100%高度，必须要明确定义它的父级元素的高度，如果你需要给元素定义满屏的高度，就得先给html和body定义height:100%;。</p>
<p><span id="more-405"></span></p>
<p>9、最小宽度</p>
<p>同max-height和max-width一样，IE6也不支持min-width。</p>
<blockquote><p>//直接使用ID来改变元素的最小宽度<br />
var container = document.getElementById(&#8216;container&#8217;);<br />
container.style.width = (container.clientWidth &lt; width) ? &#8220;500px&#8221; : &#8220;auto&#8221;;</p>
<p>//写成函数来运行<br />
function setMinWidth(elementId, width){<br />
var container = document.getElementById(elementId);<br />
container.style.width = (container.clientWidth &lt; width) ? width + &#8220;px&#8221; : &#8220;auto&#8221;;<br />
}</p>
<p>//函数示例<br />
setMinWidth(&#8216;container1&#8242;, 200);<br />
setMinWidth(&#8216;container2&#8242;, 500);</p></blockquote>
<p>10、最大宽度</p>
<blockquote><p>//直接使用ID来改变元素的最大宽度<br />
var container = document.getElementById(elementId);<br />
container.style.width = (container.clientWidth &gt; (width &#8211; 1)) ? width + &#8220;px&#8221; : &#8220;auto&#8221;;</p>
<p>//写成函数来运行<br />
function setMaxWidth(elementId, width){<br />
var container = document.getElementById(elementId);<br />
container.style.width = (container.clientWidth &gt; (width &#8211; 1)) ? width + &#8220;px&#8221; : &#8220;auto&#8221;;<br />
}</p>
<p>//函数示例<br />
setMaxWidth(&#8216;container1&#8242;, 200);<br />
setMaxWidth(&#8216;container2&#8242;, 500);</p></blockquote>
<p>11、双边距Bug</p>
<p>当元素浮动时，IE6会错误的把浮动方向的margin值双倍计算。个人觉得较好解决方法是避免float和margin同时使用。</p>
<p>12、清除浮动</p>
<p>如果你想用div(或其他容器)包裹一个浮动的元素，你会发现必须给div(容器)定义明确的height、width、overflow之中一个属性（除了auto值）才能将浮动元素严实地包裹。</p>
<blockquote><p>#container {border:1px solid #333; overflow:auto; height:100%;}<br />
#floated1 {float:left; height:300px; width:200px; background:#00F;}<br />
#floated2 {float:right; height:400px; width:200px; background:#F0F;}</p></blockquote>
<p>更多：http://www.twinsenliang.net/skill/20090413.html</p>
<p>13、浮动层错位</p>
<p>当内容超出外包容器定义的宽度时，在IE6中容器会忽视定义的width值，宽度会错误地随内容宽度增长而增长。</p>
<p>浮动层错位问题在IE6下没有真正让人满意的解决方法，虽然可以使用overflow:hidden;或overflow:scroll;来修正，但hidden容易导致其他一些问题，scroll会破坏设计；JavaScript也没法很好地解决这个问题。所以建议是一定要在布局上避免这个问题发生，使用一个固定的布局或者控制好内容的宽度（给内层加width）。</p>
<p>14、躲猫猫bug</p>
<p>在IE6和IE7下，躲猫猫bug是一个非常恼人的问题。一个撑破了容器的浮动元素，如果在他之后有不浮动的内容，并且有一些定义了:hover的链接，当鼠标移到那些链接上时，在IE6下就会触发躲猫猫。</p>
<p>解决方法很简单：<br />
1.在（那个未浮动的）内容之后添加一个&lt;span style=&#8221;clear: both;&#8221;&gt; &lt;/span&gt;<br />
2.触发包含了这些链接的容器的hasLayout，一个简单的方法就是给其定义height:1%;</p>
<p>15、绝对定位元素的1像素间距bug</p>
<p>IE6下的这个错误是由于进位处理误差造成（IE7已修复），当绝对定位元素的父元素高或宽为奇数时，bottom和right会产生错误。唯一的解决办法就是给父元素定义明确的高宽值，但对于液态布局没有完美的解决方法。</p>
<p>16、3像素间距bug</p>
<p>在IE6中，当文本(或无浮动元素)跟在一个浮动的元素之后，文本和这个浮动元素之间会多出3像素的间隔。<br />
给浮动层添加 display:inline 和 -3px 负值margin<br />
给中间的内容层定义 margin-right 以纠正-3px</p>
<p>17、IE下z-index的bug</p>
<p>在IE浏览器中，定位元素的z-index层级是相对于各自的父级容器，所以会导致z-index出现错误的表现。解决方法是给其父级元素定义z-index，有些情况下还需要定义position:relative。</p>
<p>18、Overflow Bug</p>
<p>在IE6/7中，overflow无法正确的隐藏有相对定位position:relative;的子元素。解决方法就是给外包容器.wrap加上position:relative;。</p>
<p>19、横向列表宽度bug</p>
<p>如果你使用float:left;把&lt;li&gt;横向摆列，并且&lt;li&gt;内包含的&lt;a&gt;（或其他）触发了hasLayout，在IE6下就会有错误的表现。解决方法很简单，只需要给&lt;a&gt;定义同样的float:left;即可。</p>
<p>20、列表阶梯bug</p>
<p>列表阶梯bug通常会在给&lt;li&gt;的子元素&lt;a&gt;使用float:left;时触发，我们本意是要做一个横向的列表(通常是导航栏)，但IE却可能呈现出垂直的或者阶梯状。解决办法就是给&lt;li&gt;定义float:left;而非子元素&lt;a&gt;，或者给&lt;li&gt;定义display:inline;也可以解决。</p>
<p>21、垂直列表间隙bug</p>
<p>当我们使用&lt;li&gt; 包含一个块级子元素时，IE6(IE7也有可能)会错误地给每条列表元素（&lt;li&gt;）之间添加空隙。</p>
<p>解决方法：把&lt;a&gt;flaot并且清除float来解决这个问题；另外一个办法就是触发&lt;a&gt;的hasLayout（如定义高宽、使用zoom:1;）；也可以给&lt;li&gt; 定义display:inline;来解决此问题；另外还有一个极有趣的方法，给包含的文本末尾添加一个空格。</p>
<p>22、IE6中的:hover</p>
<p>在IE6中，除了(需要有href属性)才能触发:hover行为，这妨碍了我们实现许多鼠标触碰效果，但还是有一些法子是可以解决它的。最好是不要用:hover来实现重要的功能，仅仅只用它来强化效果。</p>
<p>23、IE6调整窗口大小的 Bug</p>
<p>当把body居中放置，改变IE浏览器大小的时候，任何在body里面的相对定位元素都会固定不动了。解决办法：给body定义position:relative;就行了。</p>
<p>24、文本重复Bug</p>
<p>在IE6中，一些隐藏的元素（如注释、display:none;的元素）被包含在一个浮动元素里，就有可能引发文本重复bug。解决办法：给浮动元素添加display:inline;。</p>
]]></content:encoded>
			<wfw:commentRss>http://luinlee.com/405/ie6csschinese/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>用jStore代替Cookies实现客户端存储</title>
		<link>http://luinlee.com/351/jstore-not-cookies/</link>
		<comments>http://luinlee.com/351/jstore-not-cookies/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 09:02:51 +0000</pubDate>
		<dc:creator>Luin</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://luinlee.com/?p=351</guid>
		<description><![CDATA[开发网站时有时需要把一些数据存储到客户端，一般来讲我们都会使用小甜饼(cookies)来完成这一操作，但是小甜饼不一定总是很好吃： 每个cookies的大小不能超过4096字节。(没关系，我只存很少东西) 浏览器一般至多允许每个网站使用20个小甜饼。(浏览器是不接受过度贿赂的) 一些严厉的浏览器要求所有网站总共的甜饼数不能超过300个。(存cookies都得拼RP) 最好玩的:小甜饼不能跨浏览器！(好吧，我受够了&#8230;) 于是，有些场合cookies便无法满足要求了。 幸运的是，客户端存储还有更多更好的解决方案！ UserData : 只支持IE 7,Cool吧 -_-! Google Gear：支持所有你找得到的浏览器！但是你得安装Google Gears&#8230; Flash：同Google Gear，只不过装Flash插件即可 HTML5提供了一些本地存储方案，但&#8230;别指望了 从上面来看比较好的解决方案应该是Flash了，很少有浏览器不支持(安装)flash。 jQuery的jStore插件则提供本地存储的支持。 下面来个示例（YUI也提供了类似的插件）： 我们要实现的功能是一个投票系统（为了简化问题，PHP将不会出场:-( ），对于某个技术，用户可以选择自己的级别(想学、菜鸟、老鸟)，选择后将无法再次选择。 HTML代码： ... &#60;script src=&#34;lib/jquery.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#60;script src=&#34;lib/jStore/jquery.jstore-all.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#60;script src=&#34;custom.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; ... &#160; &#60;div id=&#34;votes&#34; class=&#34;votes-php&#34;&#62; &#60;a onclick=&#34;return vote(1);&#34; href=&#34;/&#34;&#62;想学&#60;/a&#62; &#60;a onclick=&#34;return vote(2);&#34; href=&#34;/&#34;&#62;菜鸟&#60;/a&#62; &#60;a onclick=&#34;return vote(3);&#34; href=&#34;/&#34;&#62;老鸟&#60;/a&#62; &#60;/div&#62; ... 其中href链接应该指到一个可以投票的php链接以防止用户的浏览器不支持javascript(而我的方案是对于不支持javascript的浏览器便不允许投票)。 custom.js [...]]]></description>
			<content:encoded><![CDATA[<p>开发网站时有时需要把一些数据存储到客户端，一般来讲我们都会使用小甜饼(cookies)来完成这一操作，但是小甜饼不一定总是很好吃：</p>
<ol>
<li>每个cookies的大小不能超过4096字节。(没关系，我只存很少东西)</li>
<li>浏览器一般至多允许每个网站使用20个小甜饼。(浏览器是不接受过度贿赂的)</li>
<li>一些严厉的浏览器要求所有网站总共的甜饼数不能超过300个。(存cookies都得拼RP)</li>
<li>最好玩的:小甜饼不能跨浏览器！(好吧，我受够了&#8230;)</li>
</ol>
<p>于是，有些场合cookies便无法满足要求了。</p>
<p>幸运的是，客户端存储还有更多更好的解决方案！</p>
<ol>
<li>UserData : 只支持IE 7,Cool吧 -_-!</li>
<li>Google Gear：支持所有你找得到的浏览器！但是你得安装Google Gears&#8230;</li>
<li>Flash：同Google Gear，只不过装Flash插件即可</li>
<li>HTML5提供了一些本地存储方案，但&#8230;别指望了</li>
</ol>
<p>从上面来看比较好的解决方案应该是Flash了，很少有浏览器不支持(安装)flash。</p>
<p>jQuery的jStore插件则提供本地存储的支持。</p>
<p>下面来个示例（YUI也提供了类似的插件）：</p>
<p>我们要实现的功能是一个投票系统（为了简化问题，PHP将不会出场:-( ），对于某个技术，用户可以选择自己的级别(想学、菜鸟、老鸟)，选择后将无法再次选择。</p>
<p>HTML代码：</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">...
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lib/jquery.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;lib/jStore/jquery.jstore-all.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;custom.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
...
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;votes&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;votes-php&quot;</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">onclick</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;return vote(1);&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/&quot;</span>&gt;</span>想学<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">onclick</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;return vote(2);&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/&quot;</span>&gt;</span>菜鸟<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">onclick</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;return vote(3);&quot;</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/&quot;</span>&gt;</span>老鸟<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
...</pre></div></div>

<p>其中href链接应该指到一个可以投票的php链接以防止用户的浏览器不支持javascript(而我的方案是对于不支持javascript的浏览器便不允许投票)。</p>
<p>custom.js</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//当前技术</span>
<span style="color: #003366; font-weight: bold;">var</span> tech<span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// First, we must tell jStore where to find the HTMLfile which embeds our flash script.</span>
<span style="color: #006600; font-style: italic;">// If you move the jStore.swf or jStore.Flash.html files out of their default directories (document root),</span>
<span style="color: #006600; font-style: italic;">// use this variable to define where to access the .html file. Within the .html file, you can set up the</span>
<span style="color: #006600; font-style: italic;">// path to the .swf file.</span>
<span style="color: #006600; font-style: italic;">// Then, set up the default engine we wish to use.</span>
jQuery.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>jQuery.<span style="color: #660066;">jStore</span>.<span style="color: #660066;">defaults</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
	project<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Luin-Demo'</span><span style="color: #339933;">,</span>
	engine<span style="color: #339933;">:</span> <span style="color: #3366CC;">'flash'</span><span style="color: #339933;">,</span>
	flash<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/scripts/lib/jStore/jStore.Flash.html'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span> 
&nbsp;
<span style="color: #006600; font-style: italic;">// Next, we need to wait for jStore to prepare the storage engine</span>
jQuery.<span style="color: #660066;">jStore</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>engine<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	jQuery.<span style="color: #660066;">jStore</span>.<span style="color: #660066;">flashReady</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// Finally, we need to wait for the storage engine to be ready.</span>
		<span style="color: #006600; font-style: italic;">// Once this function is called, you can use the jStore interface synchronously</span>
		engine.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #003366; font-weight: bold;">var</span> engine <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span> 
&nbsp;
			tech <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#votes'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'class'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'votes-'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #003366; font-weight: bold;">var</span> hh <span style="color: #339933;">=</span> engine.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span>tech<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>hh<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>hideVoteCdLink<span style="color: #009900;">&#40;</span>hh<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
<span style="color: #006600; font-style: italic;">// Finally, we trigger jStore's load function. This is a new step in the</span>
<span style="color: #006600; font-style: italic;">// activation procedure of jStore, since Version 1.1</span>
$<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">//!!!</span>
	jQuery.<span style="color: #660066;">jStore</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> vote<span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//$.get('/technology/mark?type=nd&amp;amp;t=' + tech + '&amp;amp;value=' + v);</span>
    hideVoteCdLink<span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jQuery.<span style="color: #660066;">jStore</span>.<span style="color: #660066;">set</span><span style="color: #009900;">&#40;</span>tech<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> hideVoteCdLink<span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> cd<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> cd <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;想学&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> cd <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;菜鸟&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>v <span style="color: #339933;">==</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span> cd <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;老鸟&quot;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#votes'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>cd <span style="color: #339933;">+</span> <span style="color: #3366CC;">' , &lt;a onclick=&quot;return changeVoteCdLink()&quot; href=&quot;#&quot;&gt;修改&lt;/a&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> changeVoteCdLink<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#votes'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;a onclick=&quot;return vote(1);&quot; href=&quot;/&quot;&gt;想学&lt;/a&gt; &lt;a onclick=&quot;return vote(2);&quot; href=&quot;/&quot;&gt;菜鸟&lt;/a&gt; &lt;a onclick=&quot;return vote(3);&quot; href=&quot;/&quot;&gt;老鸟&lt;/a&gt; '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>这样可以看到，用户使用Firefox投票后，再用IE看也是投票后的样子，解决了！(注意JS代码中的//!!!处，如果客户端不支持flash的话，jQuery.jStore.load(); 会抛出异常，你应该try/catch一下并做处理(比如不允许投票或提示安装flash(如果是iPhone的话&#8230;) ) )</p>
<p>当然，这只是个没有使用价值的demo，没有数据库就没有一切。</p>
<p>jStore的官方网站：<a href="http://eric.garside.name/docs.html?p=jstore">http://eric.garside.name/docs.html?p=jstore</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luinlee.com/351/jstore-not-cookies/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>在你的blog上显示滔滔消息</title>
		<link>http://luinlee.com/308/blogandtaotao/</link>
		<comments>http://luinlee.com/308/blogandtaotao/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 15:23:50 +0000</pubDate>
		<dc:creator>Luin</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[QQ]]></category>
		<category><![CDATA[主机]]></category>
		<category><![CDATA[微博]]></category>
		<category><![CDATA[滔滔]]></category>

		<guid isPermaLink="false">http://luinlee.com/?p=308</guid>
		<description><![CDATA[你喜欢在个人博客上显示来自自己微博的信息吗？ 很久很久以前，当可爱的twitter和可爱的饭否和可爱的嘀咕和可爱的**都活着的时候，作为它们的用户，你可以很轻松地直接把很多很HX的API用在自己的博客上。 当然，这种好事现在没有了(什么？你的主机在国外？)，于是你也许选择了和扣扣很亲密的滔滔。话说滔滔是个好东西，腾讯对自己宝宝的扣扣机器人一直照顾有加(而饭否的则一直被腾讯歧视，当然现在腾讯也没有机会不歧视它了)，这意味着你可以很轻松的把自己要发表的信息告诉滔滔的扣扣机器人(是的，它叫叨客机器人，有这么一个笑话：“我无聊时找叨客机器人聊天，谁知道它把我们的聊天记录都发到了网上。”)。 可惜的是，滔滔并没有公开的API(不管H不HX，总之是没有的。至少就我所知)。不过你可以利用一个JS文件来实现滔滔信息的显示： http://www.taotao.com/cgi-bin/msgj?qq=361198638&#38;num=1&#38;t=0 qq=QQ号，num=要显示的数量 返回内容是一个doApi函数，于是你就知道了该怎么写： &#60;script type=&#34;text/javascript&#34;&#62; function doApi&#40;obj&#41; &#123; $&#40;&#34;miniMsg&#34;&#41;.innerHTML = &#34;“ &#34; + obj.posts&#91;0&#93;.cn + &#34; ”&#34;; var sMiniMsgTime = obj.posts&#91;0&#93;.time; var sMiniMsgTimes = sMiniMsgTime.split&#40;&#34;,&#34;&#41;; switch&#40;sMiniMsgTimes&#91;0&#93;&#41; &#123; case &#34;1&#34;: sMiniMsgTime = sMiniMsgTimes&#91;1&#93; + &#34;秒前&#34;; break; case &#34;2&#34;: sMiniMsgTime = sMiniMsgTimes&#91;1&#93; + &#34;分钟前&#34;; break; case &#34;3&#34;: sMiniMsgTime = sMiniMsgTimes&#91;1&#93; + &#34;小时前&#34;; break; [...]]]></description>
			<content:encoded><![CDATA[<p>你喜欢在个人博客上显示来自自己微博的信息吗？</p>
<p>很久很久以前，当可爱的twitter和可爱的饭否和可爱的嘀咕和可爱的**都活着的时候，作为它们的用户，你可以很轻松地直接把很多很HX的API用在自己的博客上。</p>
<div id="attachment_322" class="wp-caption alignleft" style="width: 250px"><img class="size-medium wp-image-322 " title="可爱的twitter望着你呢" src="http://luinlee.com/wp-content/uploads/2010/01/twitter11-300x300.jpg" alt="可爱的twitter望着你呢" width="240" height="240" /><p class="wp-caption-text">可爱的twitter望着你呢</p></div>
<p>当然，这种好事现在没有了(什么？你的主机在国外？)，于是你也许选择了和扣扣很亲密的滔滔。话说滔滔是个好东西，腾讯对自己宝宝的扣扣机器人一直照顾有加(而饭否的则一直被腾讯歧视，当然现在腾讯也没有机会不歧视它了)，这意味着你可以很轻松的把自己要发表的信息告诉滔滔的扣扣机器人(是的，它叫叨客机器人，有这么一个笑话：“我无聊时找叨客机器人聊天，谁知道它把我们的聊天记录都发到了网上。”)。</p>
<p>可惜的是，滔滔并没有公开的API(不管H不HX，总之是没有的。至少就我所知)。不过你可以利用一个JS文件来实现滔滔信息的显示：</p>
<blockquote><p><a href="http://www.taotao.com/cgi-bin/msgj?qq=361198638&amp;num=1&amp;t=0">http://www.taotao.com/cgi-bin/msgj?qq=361198638&amp;num=1&amp;t=0</a></p></blockquote>
<p><em>qq=QQ号，num=要显示的数量</em></p>
<p>返回内容是一个doApi函数，于是你就知道了该怎么写：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">	<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
        <span style="color: #003366; font-weight: bold;">function</span> doApi<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;miniMsg&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;“ &quot;</span> <span style="color: #339933;">+</span> obj.<span style="color: #660066;">posts</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">cn</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; ”&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #003366; font-weight: bold;">var</span> sMiniMsgTime <span style="color: #339933;">=</span> obj.<span style="color: #660066;">posts</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">time</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> sMiniMsgTimes <span style="color: #339933;">=</span> sMiniMsgTime.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;,&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>sMiniMsgTimes<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;1&quot;</span><span style="color: #339933;">:</span>
					sMiniMsgTime <span style="color: #339933;">=</span> sMiniMsgTimes<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;秒前&quot;</span><span style="color: #339933;">;</span>
					<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;2&quot;</span><span style="color: #339933;">:</span>
					sMiniMsgTime <span style="color: #339933;">=</span> sMiniMsgTimes<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;分钟前&quot;</span><span style="color: #339933;">;</span>
					<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;3&quot;</span><span style="color: #339933;">:</span>
					sMiniMsgTime <span style="color: #339933;">=</span> sMiniMsgTimes<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;小时前&quot;</span><span style="color: #339933;">;</span>
					<span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #003366; font-weight: bold;">default</span><span style="color: #339933;">:</span>
					sMiniMsgTime <span style="color: #339933;">=</span> sMiniMsgTimes<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
            $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;miniTime&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Luin 于 &quot;</span> <span style="color: #339933;">+</span> sMiniMsgTime <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; @TaoTao&quot;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
      &lt;script type=&quot;text/javascript&quot; src=&quot;http://www.taotao.com/cgi-bin/msgj?qq=361198638&amp;num=1&amp;t=0&quot;&gt;&lt;/script&gt;</pre></div></div>

<p>其中对sMiniMsgTimes[0]的值的意义由于没有API说明，我也是发一条信息后不断刷新来了解值是干什么的。无知是进步的阶梯，嗯嗯。</p>
<p>最终效果如我的首页(未来某天会改版的，也许你找不到这些代码，节哀)。</p>
]]></content:encoded>
			<wfw:commentRss>http://luinlee.com/308/blogandtaotao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
