<?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>Seateng Blog &#187; Javascript</title>
	<atom:link href="http://blog.seateng.cn/tags/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.seateng.cn</link>
	<description>[spawn(fun()-&#62;Browser ! {self(), share(X)}end) &#124;&#124; X &#60;- [&#34;Web开发&#34;, &#34;网站构架&#34;, &#34;分布式开发&#34;]]</description>
	<lastBuildDate>Tue, 06 Dec 2011 09:25:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>script 标签的onload事件</title>
		<link>http://blog.seateng.cn/archives/2009/11/script-tag-onload-even.html</link>
		<comments>http://blog.seateng.cn/archives/2009/11/script-tag-onload-even.html#comments</comments>
		<pubDate>Mon, 09 Nov 2009 10:13:31 +0000</pubDate>
		<dc:creator>Seateng</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[onload]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://blog.seateng.cn/?p=188</guid>
		<description><![CDATA[下午解决个页面异步加载触发的问题记录如下。 需求：页面需要从js文件加载完数据后触发显示数据的函数。 Google之得解。 贴码如下: var url = &#34;http://host_name/example.js&#34;; var script = document.createElement(&#34;script&#34;); script.type= &#34;text/javascript&#34;; script.language=&#34;javascript&#34;; script.src=url; if(script.addEventListener){ script.addEventListener(&#34;load&#34;, callback, false); }else if(script.attachEvent){ script.attachEvent(&#34;onreadystatechange&#34;, function(){var target = window.event.srcElement; if(target.readyState == &#34;loaded&#34;) callback.call(target);}); } document.getElementsByTagName(&#34;head&#34;)[0].appendChild(script); function callback() { //TODO Show Data } 备注: onreadystatechange 事件有两次触发一次是loading事件一次是loaded事件，loading事件应用无关，加判断区分之。 再Google之已经有老外做了个loadScript库解决类似问题地址如下： http://design-noir.de/webdev/JS/loadScript/]]></description>
			<content:encoded><![CDATA[<p>下午解决个页面异步加载触发的问题记录如下。</p>
<p>需求：页面需要从js文件加载完数据后触发显示数据的函数。<br />
Google之得解。</p>
<p>贴码如下:</p>
<pre class="brush: jscript; title: ;">
var url      = &quot;http://host_name/example.js&quot;;
var script  = document.createElement(&quot;script&quot;);
script.type= &quot;text/javascript&quot;;
script.language=&quot;javascript&quot;;
script.src=url;
if(script.addEventListener){
	script.addEventListener(&quot;load&quot;, callback, false);
}else if(script.attachEvent){
	script.attachEvent(&quot;onreadystatechange&quot;, function(){var target = window.event.srcElement; if(target.readyState == &quot;loaded&quot;) callback.call(target);});
}
document.getElementsByTagName(&quot;head&quot;)[0].appendChild(script);

function callback()
{
//TODO Show Data
}
</pre>
<p><strong>备注</strong>: onreadystatechange 事件有两次触发一次是loading事件一次是loaded事件，loading事件应用无关，加判断区分之。</p>
<p>再Google之已经有老外做了个loadScript库解决类似问题地址如下：<br />
<a href="http://design-noir.de/webdev/JS/loadScript/">http://design-noir.de/webdev/JS/loadScript/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.seateng.cn/archives/2009/11/script-tag-onload-even.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE8 3月20日正式发布</title>
		<link>http://blog.seateng.cn/archives/2009/03/ie8-release.html</link>
		<comments>http://blog.seateng.cn/archives/2009/03/ie8-release.html#comments</comments>
		<pubDate>Fri, 20 Mar 2009 10:37:38 +0000</pubDate>
		<dc:creator>Seateng</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WEB前端开发]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://blog.seateng.cn/?p=80</guid>
		<description><![CDATA[IE8浏览器于北京时间3月20日零时正式发布。 各大媒体头版头条，争相介绍IE8的新特性。其中一个特性是IE8 增加了对W3C Selector API的支持，Javascript 增加了两个函数 querySelector() 和 querySelectorAll() 。听都都引用了这个例子： 1 2 3 4 5 6 7 8 9 10 &#60;html&#62; &#60;body&#62; &#60;div&#62;&#60;div&#62;&#60;span&#62;InnerSpan&#60;/span&#62;&#60;/div&#62;&#60;/div&#62; &#60;div&#62;&#60;span class=&#34;myClass&#34;&#62;ClassSpan&#60;/span&#62;&#60;/div&#62; &#60;script type=&#34;text/javascript&#34;&#62; alert(document.querySelector(&#34;div div span&#34;).innerHTML); alert(document.querySelector(&#34;span.myClass&#34;).innerHTML); &#60;/script&#62; &#60;/body&#62; &#60;/html&#62; 当你真的把这段代码，Ctrl-C Ctrl-V运行的时候你会发现IE8直接提示JS错误。不是IE8已经支持querySelector()和querySelectorAll了吗？ 原来IE8少了DOCTYPE定义就不认这两函数了。 &#60;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&#62; Jquery的强大之处正是这种Selector的写法，如果各浏览器都能实现W3C Selector API，作为Javascript的一个基本特性，那么提高性能的同时也方便了Javascript的开发者。反过来Jquery如果整合了内建的Selector，到时候在支持W3C Selector API的浏览器上将如虎添翼，性能提高的同时还能省去一大部分核心代码。 根据Robert Biggs 在blog上发布的性能测试报告，我们可以看到 IE8内建的Selector性能比Jquery快了近100倍。 几个框架的测试结果如下： [...]]]></description>
			<content:encoded><![CDATA[<p>IE8浏览器于北京时间3月20日零时正式发布。<br />
各大媒体头版头条，争相介绍IE8的新特性。其中一个特性是IE8 增加了对<a href="http://www.w3.org/TR/selectors-api/" target="_blank" title="W3C Selector API Document">W3C Selector API</a>的支持，Javascript 增加了两个函数 querySelector() 和 querySelectorAll() 。听都都引用了这个例子：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">span</span>&gt;</span>InnerSpan<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">span</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;myClass&quot;</span>&gt;</span>ClassSpan<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">span</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
      alert(document.querySelector(&quot;div div span&quot;).innerHTML);
      alert(document.querySelector(&quot;span.myClass&quot;).innerHTML);
    <span style="color: #009900;">&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: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>当你真的把这段代码，Ctrl-C Ctrl-V运行的时候你会发现IE8直接提示JS错误。不是IE8已经支持querySelector()和querySelectorAll了吗？<br />
原来IE8少了DOCTYPE定义就不认这两函数了。<br />
<span id="more-80"></span></p>
<p>&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;</p>
<p>Jquery的强大之处正是这种Selector的写法，如果各浏览器都能实现W3C Selector API，作为Javascript的一个基本特性，那么提高性能的同时也方便了Javascript的开发者。反过来Jquery如果整合了内建的Selector，到时候在支持W3C Selector API的浏览器上将如虎添翼，性能提高的同时还能省去一大部分核心代码。</p>
<p>根据<a href="http://blogs.vertigo.com/personal/rbiggs/Blog/archive/2008/03/10/queryselector-ie8-vs-webkit.aspx" title="performance reports">Robert Biggs</a> 在blog上发布的性能测试报告，我们可以看到 <strong>IE8内建的Selector性能比Jquery快了近100倍</strong>。</p>
<p>几个框架的测试结果如下：<br />
全部Selector跑完<br />
IE8: 924ms<br />
Ext 2.0: 41823ms<br />
Jquery 1.2.3: 97696ms<br />
Prototype 1.6.0.2: 230289ms</p>
<p>注：IE8+ Firefox3.1+ Safari 3.1+都支持<a href="http://www.w3.org/TR/selectors-api/">W3C Selector API</a>。</p>
<p>另外IE8在向后兼容上也费尽心机。多了个兼容模式的按钮不说。<br />
还可以通过在页面head上加个：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;X-UA-Compatible&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;IE=EmulateIE7&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></td></tr></table></div>

<p>让IE8自动用IE7兼容模式解析。如果你的应用不想针对IE8调整，那么在你的页面上加上这段试试。</p>
<p>对于UE（User Experience）来说，新版本浏览器的发布最需要关心的莫过于兼容的问题，大部分的前端开发主要考虑IE6 IE7 Firefox 兼容，从IE8正式发布的那刻起IE8便加入了主要兼容行列。前端开发要兼容的浏览器越多，成本越大这是毋庸置疑的事实。浏览器之战爽了大家苦了UE Developer。。。</p>
<p>IE8兼容模式和兼容IE7的可以看IEBlog的上的这两篇文章:<br />
<a href="http://blogs.msdn.com/ie/archive/2008/01/21/compatibility-and-ie8.aspx" target="_blank">Compatibility and IE8</a><br />
<a href="http://blogs.msdn.com/ie/archive/2008/06/10/introducing-ie-emulateie7.aspx" target="_blank">Introducing IE=EmulateIE7</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.seateng.cn/archives/2009/03/ie8-release.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE下javascript cookie path设置Bug</title>
		<link>http://blog.seateng.cn/archives/2009/03/ie-javascript-cookie-path-bug.html</link>
		<comments>http://blog.seateng.cn/archives/2009/03/ie-javascript-cookie-path-bug.html#comments</comments>
		<pubDate>Sun, 15 Mar 2009 08:39:56 +0000</pubDate>
		<dc:creator>Seateng</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://blog.seateng.cn/?p=21</guid>
		<description><![CDATA[手上一个广告项目，在Firefox下顺利测试通过。自信JS代码能兼容IE，FF测试过后随手就仍给CS测试，结果CS反馈说有问题。排查一番，发现居然和Javascript 设置 Cookie 时的 path 有关。IE下Cookie种在 /或者URL所在路径时正常，如果Cookie值作用域在当前URL下则IE下javascript 无法获取到设置的Cookie值。 看下面演示代码: var cookie_name=&#34;name&#34;; var cookie_value=&#34;value&#34;; expires = new Date(); expires.setTime(expires.getTime() + 86400*1000); //有Bug document.cookie无法独到cookie_name值 document.cookie = cookie_name + &#34;=&#34; + encodeURIComponent(cookie_value) + &#34;; expires=&#34; + expires.toGMTString() + &#34;; path=&#34; + window.location.pathname; //正常 document.cookie = cookie_name + &#34;=&#34; + encodeURIComponent(cookie_value) + &#34;; expires=&#34; + expires.toGMTString() + &#34;; path=/test/&#34;; [...]]]></description>
			<content:encoded><![CDATA[<p>手上一个广告项目，在Firefox下顺利测试通过。自信JS代码能兼容IE，FF测试过后随手就仍给CS测试，结果CS反馈说有问题。排查一番，发现居然和Javascript 设置 Cookie 时的 path 有关。IE下Cookie种在 /或者URL所在路径时正常，如果Cookie值作用域在当前URL下则IE下javascript 无法获取到设置的Cookie值。</p>
<p>看下面演示代码:<br />
<span id="more-21"></span></p>
<pre class="brush: jscript; smart-tabs: false; tab-size: 2; title: ; toolbar: true;">
var cookie_name=&quot;name&quot;;
var cookie_value=&quot;value&quot;;
expires = new Date();
expires.setTime(expires.getTime() + 86400*1000);

//有Bug document.cookie无法独到cookie_name值
document.cookie = cookie_name + &quot;=&quot; + encodeURIComponent(cookie_value) +
                          &quot;; expires=&quot; +  expires.toGMTString() +
                          &quot;; path=&quot; + window.location.pathname;
//正常
document.cookie = cookie_name + &quot;=&quot; + encodeURIComponent(cookie_value) +
                          &quot;; expires=&quot; +  expires.toGMTString() +
                          &quot;; path=/test/&quot;;
//正常
document.cookie = &quot;cookie_name=&quot; + encodeURIComponent(cookie_value) +
                          &quot;; expires=&quot; +  expires.toGMTString() +
                          &quot;; path=/&quot;;
</pre>
<p>怀疑是IE的Bug、<br />
在google上 搜了下关键词: <strong>ie javascript cookie path bug</strong><br />
同样的问题在<a href="http://hi.baidu.com/rainchen/blog/item/95b3e71189d87dcea7ef3fc9.html">罪与罚</a>的博客上也有描述，而且博主联系过微软<a href="http://blogs.msdn.com/ie/default.aspx">IEBLOG</a>的Eric。得到的回复是:</p>
<blockquote><p>You have uncovered an IE bug where cookies that are set with a path that contains a filename (e.g. /page.htm) are not accessible to the document.cookie function, although they are correctly sent to the server in the HTTP header. This has been broken for at least 10 years and unfortunately probably will not be fixed in IE8.</p>
<p>Thanks,</p>
<p>-Eric
</p></blockquote>
<p>一个存在10年的Bug。。。而且IE8也不会修复，实在是无语。</p>
<p>需求是cookie值只对当前页面有效，没办法只好用替代方案，看代码：</p>
<pre class="brush: jscript; title: ;">
//IE Cookie Bug 替代方案
var cookie_path  = window.location.pathname;
var cookie_name  = encodeURIComponent(cookie_path.substring(cookie_path.lastIndexOf('/')+1));
     cookie_path  = cookie_path.substring(0, cookie_path.lastIndexOf('/')+1);
var cookie_value = &quot;value&quot;;
expires = new Date();
expires.setTime(expires.getTime() + 86400*1000);

document.cookie = cookie_name + &quot;=&quot; + encodeURIComponent(cookie_value) +
                          &quot;; expires=&quot; +  expires.toGMTString() +
                          &quot;; path=&quot; + cookie_path;
</pre>
<p>替代方案根据每个页面的URL文件名来做Cookie名，有效范围在当前页路经下。<br />
如：url 等于 /test/test.html<br />
则cookie名为test.html，有效路径为/test/<br />
这样也可以做到同一个js部署在每个页面上能读到只对当前URL有效的cookie值。代价是当用户在同一级目录下访问很多页面时会导致cookie值不断增大。结果是当前路径下的每个http请求都带很长一段的cookie，直接导致服务器接收客户端request的header长度增长，流量增长的同时服务器负担也变重。而且根据 <a href="http://www.ietf.org/rfc/rfc2109.txt">RFC 2109</a> 的定义Cookie也有长度和个数限制，IE允许的最大 Cookie 长度是 4096 字节，<a href="http://support.microsoft.com/kb/941495">允许50个</a> Cookie 名-值对。如果要突破50个名-值对的限制，可以在一个名-值使用Cookie字典的方式保存更多的Cookie变量。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.seateng.cn/archives/2009/03/ie-javascript-cookie-path-bug.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

