<?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>随网之舞IE</title>
	<atom:link href="http://dancewithnet.com/tag/ie/feed/" rel="self" type="application/rss+xml" />
	<link>http://dancewithnet.com</link>
	<description>WEB Design{HTML:CSS:Javascript:DOM:AJAX:PHP:Usability}/Viewpoint/Photo/Food/Mood</description>
	<lastBuildDate>Mon, 18 Jul 2011 02:45:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IE中选择符的4095限制</title>
		<link>http://dancewithnet.com/2009/09/10/ie-css-4095-limit/</link>
		<comments>http://dancewithnet.com/2009/09/10/ie-css-4095-limit/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 15:42:42 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[4095]]></category>
		<category><![CDATA[addRule]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[cssText]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1471</guid>
		<description><![CDATA[去年曾总结了《IE对CSS样式表的限制和解决方案》中限制的第4条写道“一个CSS文件的不能超过288kb？”，这是一个疑问句，当时没有重现出来且参考来自Internet Explorer CSS File Size Limit。今天终于... ]]></description>
			<content:encoded><![CDATA[<p>去年曾总结了<a href="http://dancewithnet.com/2008/04/22/a-solution-of-limit-of-style-tags-in-ie/">《IE对CSS样式表的限制和解决方案》</a>中限制的第4条写道“一个CSS文件的不能超过288kb？”，这是一个疑问句，当时没有重现出来且参考来自<a href="http://joshua.perina.com/africa/gambia/fajara/post/2008/1/25/internet-explorer-css-file-size-limit">Internet Explorer CSS File Size Limit</a>。今天终于看到了IE在CSS上的另一个限制：<strong>IE中每个style标签或css文件的选择符个数不能超过4095。</strong>其实style属性也应该有这个限制，但是几乎不可能发生。这个限制在IE6、IE7和IE8中存在。请看<a href="http://dancewithnet.com/lab/2009/ie-css-4095-limit/" class="link-btn">IE关于4095个选择符限制的DEMO</a>。</p>
<p><span id="more-1471"></span></p>
<p>DEMO中的<a href="http://dancewithnet.com/lab/2009/ie-css-4095-limit/style.css">style.css</a>有4913个选择符，大小为554kb，但在IE中却在4095个选择符之后失效，所以说明IE的CSS文件不存在不能超过288kb的限制。</p>
<p>所以在IE中对style标签使用<a href="http://msdn.microsoft.com/en-us/library/aa358796%28VS.85%29.aspx">addRule方法</a>和<a href="http://msdn.microsoft.com/en-us/library/ms533698(VS.85).aspx">cssText属性</a>添加样式时都可能会碰到这个限制，比如使用addRule方法添加第4096个选择符时会报“Invalid Argument”的异常。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2009/09/10/ie-css-4095-limit/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>CSS实现HTML元素透明的那些事</title>
		<link>http://dancewithnet.com/2009/09/06/css-opacity/</link>
		<comments>http://dancewithnet.com/2009/09/06/css-opacity/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 15:44:00 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[-ms-filter]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[hasLayout]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[opacity]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1469</guid>
		<description><![CDATA[CSS3草案中定义了{opacity:&#60;length&#62; &#124; inherit;}来声明元素的透明度，这已经得到了大多数现代浏览器的支持，而IE则很早通过特定的私有属性filter来实现的，所以HTML元素的透明效果已经无处... ]]></description>
			<content:encoded><![CDATA[<p>CSS3草案中定义了<a href="http://www.w3.org/TR/css3-color/#transparency"><code>{opacity:&lt;length&gt; | inherit;}</code></a>来声明元素的透明度，这已经得到了大多数现代浏览器的支持，而IE则很早通过特定的私有属性<a href="http://msdn.microsoft.com/en-us/library/ms532967%28VS.85%29.aspx"><code>filter</code></a>来实现的，所以HTML元素的透明效果已经无处不在了。首先看看<a href="http://developer.yahoo.com/yui/articles/gbs/">A级浏览器</a>所支持的用<a href="https://developer.mozilla.org/en/CSS/opacity">CSS实现元素透明的方案</a>：</p>
<p><span id="more-1469"></span></p>
<table>
<tr>
<th>浏览器</th>
<th>最低<br />版本</th>
<th>方案</th>
</tr>
<tr>
<th rowspan="3">Internet Explorer</th>
<td>4.0</td>
<td><code>filter: alpha(opacity=xx);</code></td>
</tr>
<tr>
<td>5.5</td>
<td><code>filter: progid:DXImageTransform.Microsoft.Alpha(opacity=xx);</code>
</td>
</tr>
<tr>
<td>8.0</td>
<td><code>filter: "alpha(opacity=xx)";<br />
filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=xx)";<br />
-ms-filter: "alpha(opacity=xx)";<br />
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=30)";</code>
</td>
</tr>
<tr>
<th>Firefox (Gecko)</th>
<td>0.9 (1.7)</td>
<td><code>opacity</code></td>
</tr>
<tr>
<th>Opera</th>
<td>9.0</td>
<td><code>opacity</code></td>
</tr>
<tr>
<th>Safari (WebKit)</th>
<td>1.2 (125)</td>
<td><code>opacity</code></td>
</tr>
</table>
<p>实际上在IE8中，-ms-filter是filter的别名，两者区别是<a href="http://msdn.microsoft.com/en-us/library/ms530752%28VS.85%29.aspx">-ms-filter的属相值必须被单引号或双引号包围</a>，而filter中则不是必须，而在IE8之前的版本中，filter的属性值必须不被单引号或双引号包围。</p>
<p id="hasLayout">IE中的HTML元素要实现透明，则其必须具备layout，这样的元素有仅可读的属性<a href="http://msdn.microsoft.com/en-us/library/ms530764%28VS.85%29.aspx">hasLayout</a>，且其值为true。具体情况如下：</p>
<ol>
<li><code>body</code>、<code>img</code>、<code>table</code>、<code>tr</code>、<code>th</code>、<code>td</code>等元素的<code>hasLayout</code>一直为<code>true</code>。</li>
<li><code>type</code>为<code>text</code>、<code>button</code>、<code>file</code>或<code>select</code>的<code>input</code>的<code>hasLayout</code>一直为<code>true</code>。</li>
<li>设置<code>{position:absolute}</code>的元素的<code>hasLayout</code>为<code>true</code></li>
<li>设置<code>{float:left|right}</code>的元素的<code>hasLayout</code>为<code>true</code></li>
<li>设置<code>{display:inline-block}</code>的元素的<code>hasLayout</code>为<code>true</code></li>
<li>设置<code>{height:xx}</code>或<code>{width:xx}</code>的元素必须具体以下两个条件之一，其<code>hasLayout</code>才能为<code>true</code>：
<ol>
<li>IE8兼容模式和IE8以前的浏览器中，在标准(strict)模式下其<code>display</code>的值是<code>block</code>，如<a href="http://dancewithnet.com/lab/2009/css-opacity/#demo3">demo3</a>就不行。</li>
<li>元素在怪癖模式（compat mode）下。</li>
</ol>
</li>
<li>设置了<code>{zoom:xx}</code>的元素在IE8的兼容模式或IE8之前的浏览器中其<code>hasLayout</code>为<code>true</code>，但在IE8的标准模式下则不会触发<code>hasLayout</code>。</li>
<li>设置了<code>{writing-mode:tb-rl}</code>的元素的<code>hasLayout</code>为<code>true</code>。</li>
<li>元素的<a href="http://msdn.microsoft.com/en-us/library/ms537837%28VS.85%29.aspx"><code>contentEditable</code></a>的属性值为<code>true</code>。</li>
<li>在IE8标准模式下设置了<code>{display:block}</code>的元素的<code>hasLayout</code>一直为<code>true</code>，如<a href="http://dancewithnet.com/lab/2009/css-opacity/#demo8">demo8</a>。</li>
</ol>
<p>关于hasLayout的更多详情可以看<a href="http://msdn.microsoft.com/en-us/library/bb250481%28VS.85%29.aspx">Exploring Internet Explorer &#8220;HasLayout&#8221; Overview</a>和<a href="http://www.satzansatz.de/cssd/onhavinglayout.html">On having layout</a></p>
<p>从上面就可以看出IE实现HTML元素的透明如此混乱，为了向下兼容和自己的私有属性让IE上实现元素透明有多种方式，比如<a href="http://dancewithnet.com/lab/2009/css-opacity/" class="link-btn">CSS Opacity实例中的demo1到demo8</a>，虽然<a href="http://blogs.msdn.com/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx">IE团队推荐实现透明的方式</a>是：</p>
<pre><code>{
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
  opacity: .5;
}</code></pre>
<p>而目前简单最好用的实现方式是<a href="http://dancewithnet.com/lab/2009/css-opacity/" class="link-btn">如CSS Opacity中demo4这样</a>：</p>
<pre><code>{
    filter:alpha(opacity=30);
    opacity:.3;
}</code></pre>
<p>实际上目前最流行的JavaScript框架的设置样式方法都是应用这种方式，并且针对IE设置了<code>{zoom:1}</code>来让元素的<code>hasLayout</code>为<code>true</code>，但在IE8的标准模式下<code>zoom</code>并不能触发<code>hasLayout</code>，所以利用它们设置<code>hasLayout</code>为<code>false</code>的元素的透明度时在IE8的标准模式下是失败的，这个bug在<a href="http://developer.yahoo.com/yui/">YUI</a><ins datetime="2009-09-09T09:38:41+08:00">（我已经给YUI团队提交了这个bug，他们会在<a href="http://yuilibrary.com/projects/yui2/ticket/2528440">下个版本修复</a>，最新的2.8.0中依旧存在，期待2.9.0吧）</ins>、<a href="http://prototypejs.org">Prototype</a>、<a href="http://jquery.com">jQuery</a>和<a href="http://mootools.net">Mootools</a>的最新版本中都存在，具体请在IE8标准模式下看<a href="http://dancewithnet.com/lab/2009/css-opacity/#demo9">demo9到demo11</a>。同样由于在IE8中设置透明度的方式多种多样，所以利用JavaScript获取HTML元素的透明度值需要考虑多种情况，YUI完美解决了这个问题，Prototype比jQuery稍微周全一点，而Mootools直接是<a href="https://mootools.lighthouseapp.com/projects/2706/tickets/707-getstyleopacity-always-returns-1">bug</a>，具体可以<a href="http://dancewithnet.com/lab/2009/css-opacity/" class="link-btn">在IE下看demo1到demo8</a>的演示。从这个角度给4个框架来个排名的话，YUI第一、Prototype第二、jQuery第三、Mootools垫底。</p>
<p>我简单的实现了设置和获取Opacity的函数，可以避开上面框架存在的bug，请<a href="http://dancewithnet.com/lab/2009/css-opacity/#demo12" class="link-btn">在IE8标准模式下看demo12</a>：</p>
<pre><code><span>//设置CSS opacity 属性的函数，解决IE8的问题</span>
var setOpacity = function(el,i){
  if(window.getComputedStyle){<span>// for non-IE</span>
    el.style.opacity = i;
  }else if(document.documentElement.currentStyle){ <span>// for IE</span>
    if(!el.currentStyle.hasLayout){
      el.style.zoom = 1;
    }
    if(!el.currentStyle.hasLayout){ <span>//在IE8中zoom不生效，所以再次设置inline-block</span>
      el.style.display = 'inline-block';
    }
    try{
      <span>//测试是否已有filter
      //http://msdn.microsoft.com/en-us/library/ms532847%28VS.85%29.aspx</span>
      if(el.filters){
        if(el.filters('alpha')){
	  el.filters('alpha').opacity = i * 100;
	}else{
	  el.style.filter += 'alpha(opacity='+ i * 100 +')';
	 }
       }
    }catch(e){
      el.style.filter = 'alpha(opacity='+ i * 100 +')';
    }
  }
}

<span>//获取CSS opacity 属性值的函数</span>
<span>//借鉴自http://developer.yahoel.com/yui/docs/YAHOO.util.Dom.html#method_getStyle</span>
var getOpacity = function(el){
  var value;
  if(window.getComputedStyle){
    value = el.style.opacity;
    if(!value){
      value = el.ownerDocument.defaultView.getComputedStyle(el,null)['opacity'];
    }
    return value;
  }else if(document.documentElement.currentStyle){
    value = 100;
    try { // will error if no DXImageTransform
        value = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
    } catch(e) {
        try { // make sure its in the document
            value = el.filters('alpha').opacity;
        } catch(err) {
        }
    }
    return value / 100;
  }
}
</code></pre>
<p>不得不说，这些事都是IE整出来的……</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2009/09/06/css-opacity/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>IE对CSS样式表的限制和解决方案</title>
		<link>http://dancewithnet.com/2008/04/22/a-solution-of-limit-of-style-tags-in-ie/</link>
		<comments>http://dancewithnet.com/2008/04/22/a-solution-of-limit-of-style-tags-in-ie/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 08:39:33 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[@import]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[cssText]]></category>
		<category><![CDATA[document.styleSheet]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=1281</guid>
		<description><![CDATA[HTML文档与CSS的关联常见有4种方式：


使用link标记
&#60;link rel="stylesheet" type="text/css" href="sheet.css" /&#62;


使用style元素
&#60;style type="text/css"&#62;
body{background:#fff;}
h1{font-size:2em;}
&#60;/style&#62;


使用@... ]]></description>
			<content:encoded><![CDATA[<p>HTML文档与CSS的关联常见有4种方式：</p>
<ol>
<li>
<p><strong>使用link标记</strong></p>
<pre><code>&lt;link rel="stylesheet" type="text/css" href="sheet.css" /&gt;</code></pre>
</li>
<li>
<p><strong>使用style元素</strong></p>
<pre><code>&lt;style type="text/css"&gt;
body{background:#fff;}
h1{font-size:2em;}
&lt;/style&gt;</code></pre>
</li>
<li>
<p><strong>使用@import指令</strong></p>
<pre><code>&lt;style type="text/css"&gt;
@import url(sheet1.css);
@import "sheet2.css";
&lt;/style&gt;</code></pre>
</li>
<li>
<p><strong>使用style属性的内联样式(inline style)</strong></p>
<pre><code>&lt;p style="color:#f00;"&gt;这是红色的字&lt;/p&gt;</code></pre>
</li>
</ol>
<p>在实际应用中，使用style属性的内联样式是不推荐使用的，XHTML1.1已经将其标准为不建议使用，原因很简单这种方式不比font标记强多少，削弱了CSS集中控制整个文档外观的优点。前3种方式利用了link标记和style标记，在IE(包括IE6、IE7和IE8 beta1)中有如下限制：<span id="more-1281"></span></p>
<ol>
<li>
<p><strong>文档中只有前31个link或style标记关联的CSS能够应用。</strong></p>
<p>从第32个开始，其标记关联的CSS都将失效。IE的官方文档<a href="http://support.microsoft.com/kb/262161/en-us">All style tags after the first 30 style tags on an HTML page are not applied in Internet Explorer</a>也提及这个限制，包括在使用.xsl的.xml文件也有这个限制。但是似乎写错了数量。请在IE看：</p>
<p><a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/index.html" class="link-btn">例1：34个style标记同时应用</a></p>
<p><a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/link.html" class="link-btn">例2：1个style标记和34个link标记同时应用</a></p>
</li>
<li>
<p><strong>一个style标记只有前31次<code>@import</code>指令有效应用。</strong></p>
<p>从第32个@import指令开始忽略。请看：</p>
<p><a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/import.html" class="link-btn">例3：在一个style标记中使用34次<code>@import</code>指令</a>。</p>
</li>
<li>
<p><strong>一个css文件只有前31次@import指令有效应用。</strong></p>
<p>从第31个@import指令开始忽略。请看：</p>
<p><a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/link-import.html" class="link-btn">例4：用link标记引入一个使用34次<code>@import</code>指令的css文件</a></p>
<p><a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/import-import.html" class="link-btn">例5：用style标记引入一个使用34次<code>@import</code>指令的css文件</a></p>
<p><a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/link-import-new.html" class="link-btn">例6：用link和style标记分别引入一个使用31次<code>@import</code>指令以上的css文件</a></p>
</li>
<li>
<p><del datetime="2009-09-10T23:45:30+08:00"><strong>一个CSS文件的不能超过288kb？</strong></del><ins datetime="2009-09-10T23:45:30+08:00"><a href="http://dancewithnet.com/2009/09/10/ie-css-4095-limit/">IE中每个style标签或css文件的选择符个数不能超过4095</a></ins></p>
<p><del datetime="2009-09-10T23:45:30+08:00">这个消息来自<a href="http://joshua.perina.com/africa/gambia/fajara/post/2008/1/25/internet-explorer-css-file-size-limit">Internet Explorer CSS File Size Limit</a>。</del></p>
</li>
<li>
<p><ins datetime="2008-05-05T00:13:37+08:00" cite="http://www.quirksmode.org/bugreports/archives/2005/02/Cascade_limit_via_import_rule.html"><strong>@import指令下层叠限制不能超过4层</strong></ins></p>
<p>在IE下通过@import指令引入css文件时，第5层会失效。这个限制来自<a href="http://www.quirksmode.org/bugreports/archives/2005/02/Cascade_limit_via_import_rule.html">Cascade limit via @import rule</a>。实际上，由于浏览器对多层嵌套的支持不完善，所以即使不得已使用了@import指令引入CSS文件，也不要超过2层。</p>
</li>
</ol>
<p>IE对CSS的限制在绝大部分情况下是不会遇到的，即使遇到最佳的解决方案也应该是手动或者通过后端程序对CSS文件和响应的标记进行合并，<a href="http://developer.yahoo.com/performance/rules.html#num_http">最小化的http请求数是优化页面呈现的第一原则</a>。</p>
<p>在IE中，可以通过<a href="http://msdn2.microsoft.com/en-us/library/ms535871.aspx"><code>document.styleSheets</code>对象</a>（Firefox、Opera9和Safari3.1都支持）修改内联和嵌入样式的值。该对象仅在文档包含style或link元素时可用，其实用<code>document.styleSheets.length</code>就可以看出IE下这个值最大是31。下面是利用Javascript来合并<code>link</code>和<code>style</code>标记来解决IE下的限制：</p>
<pre><code>var fnMergeStyleSheet = function(){
if(!document.styleSheets){
    return;
}
var aSheet = document.styleSheets,
    aStyle = document.getElementsByTagName('style'),
    aLink  = document.getElementsByTagName('link');
    if(aStyle.length + aLink.length < 32 || !aSheet[0].cssText){
        <span>//document.styleSheets.cssText 只有IE支持 </span>
        return;
    }
    var aCssText = [],aCloneLink = [];
    <span>//把style标签中的样式存入，然后删掉该标签，但保留第一个
    //因为由getElementsByTagName方法返回值是nodeList，所以删除时循环用倒序</span>
    for(var i=aStyle.length-1;i>-1;--i){
        var o = aStyle[i];
            aCssText.push(o.innerHTML);
            if(i>0){
                o.parentNode.removeChild(o);
            }
    }
    <span>//在IE中只有在31之内的link标签才能通过其styleSheet.cssText获取样式
    //无法的获取复制到一个数组aCloneLink中</span>
    for(var i=aLink.length-1;i>-1;--i){
       var o = aLink[i];
          if(o.getAttribute &#038;&#038; o.getAttribute('rel')==='stylesheet'){
               if(o.styleSheet){
                  aCssText.push(o.styleSheet.cssText);
               }else{
                   aCloneLink.push(o.cloneNode(true));
               }
               if(i>0){
                   o.parentNode.removeChild(o);
               }
          }
    }
    var oHead = document.getElementsByTagName('head')[0];
    <span>//通过前面的删除，前31个link或者style标记最多只剩下2个
    //通过重新增加link节点的方法激活其styleSheet属性，从而获取样式</span>
    for(var i = aCloneLink.length-1;i>-1;--i){
        var o = aCloneLink[i];
        oHead.appendChild(o);
        aCssText.push(o.styleSheet.cssText);
        oHead.removeChild(o);
    }
   <span>//把所有的样式都复制给第一个标签</span>
    aSheet[0].cssText += aCssText.join('');
}</code></pre>
<p>上面仅仅是一个简单的粗糙的解决方案，演示请看<a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/index.html" class="link-btn">例1</a>和<a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/link.html" class="link-btn">例2</a>，可以改进的地方还有：</p>
<ol>
<li>没有考虑<code>media</code>这个属性，如果有多个<code>media</code>应该分别合并，当然更没有考虑<code>link</code>标记的<code>rel="alternate stylesheet"</code>带来的影响。但我更建议通过<code>@media</code>指令把相应的样式写在同一个文件中，至少可以减少HTTP连接数。</li>
<li>没有解决@import指令31次限制的问题，其实可以提取其href值然后进行激活处理。但是实际应用在建议<a href="http://developer.yahoo.com/performance/rules.html#csslink">用<code>link</code>标记来替代@import指令</a>，因为在IE中<code>@import</code>指令相当与把link标记写在文档的底部，会导致在IE5/6页面加载时瞬间无样式问题，学名叫“Flash of Unstyled Content”（简称为FOUC）的bug，当然可以通过在文档头中放一个link或script元素可以避免这个bug。</li>
<li>一般来讲页面之所有出现大量的<code>link</code>或者<code>style</code>标签很可能有很多是相同的，可以在aCssText合并前除掉相同的项，减少代码量。</li>
</ol>
<p><ins datetime="2008-05-09T12:32:43+08:00"> 如果不用DOM中已存在的样式元素直接通过cssText属性添加样式代码，而是创建一个新的样式元素来添加，一定要注意先把新建的样式元素先添加到DOM中，然后再通过cssText属性添加样式代码。反之，其添加的样式代码似乎先被IE6的样式解析器解析后才添加，这样!imporant和hack都将失效。请看<a href="http://dancewithnet.com/lab/2008/a-solution-of-limit-of-style-tags-in-ie/hack.html" class="link-btn">例7</a>。不建议通过添加新的样式元素的方式来添加新的样式，这样很容易达到IE的限制条件。</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2008/04/22/a-solution-of-limit-of-style-tags-in-ie/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Ajax的小贴士</title>
		<link>http://dancewithnet.com/2007/09/25/ajax-tips/</link>
		<comments>http://dancewithnet.com/2007/09/25/ajax-tips/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 10:14:15 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[gb2312]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[responseXML]]></category>
		<category><![CDATA[utf-8]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>
		<category><![CDATA[缓存]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2007/09/25/ajax-tips/</guid>
		<description><![CDATA[在使用Ajax过程中，有时候总会遇到一些难题，浏览器兼容、编码、IE下的特殊处理等等，偶尔会搞的人头昏脑胀哭笑不得，这里列一些小贴士，或许有些用。
使用Javascript库
Ajax的流行和巨大威... ]]></description>
			<content:encoded><![CDATA[<p>在使用Ajax过程中，有时候总会遇到一些难题，浏览器兼容、编码、IE下的特殊处理等等，偶尔会搞的人头昏脑胀哭笑不得，这里列一些小贴士，或许有些用。</p>
<h3>使用Javascript库</h3>
<p>Ajax的流行和巨大威力，让我们重新审视了Javascript的开发，也直接促使各种库的出现。对于普通的开发者，使用一些适合自己的Javascript库不仅可以避免Ajax应用上的浏览器兼容等问题，也使其开发更加的稳定和高效。这里列一些我知晓的轻量级的Javascript库：<span id="more-1135"></span></p>
<ol>
<li><strong><a href="http://developer.yahoo.com/yui/">YUI</a></strong>：YAHOO出品，组件丰富强大健壮稳定，是团队协作开发的首选。</li>
<li><strong><a href="http://jquery.com/">JQuery</a></strong>：灵活、高效，其基于CSS3 和XPath的选择器语法引擎非常的强大和完整。</li>
<li><strong><a href="http://www.prototypejs.org/">Prototype</a></strong>：是一个非常优雅的Javascript库，最经典的莫过于$符号了，DWR，JQuery都被它吸引了。在它基础上出现了<a href="http://script.aculo.us/">script.aculo.us</a>。</li>
<li><strong><a href="http://mootools.net/">Mootools</a></strong>：核心语法和Prototype比较类似，但是用过之后才知道什么叫简单轻巧和短小精悍。</li>
</ol>
<h3>编码问题</h3>
<p>通过XMLHttpRequest获取的数据，默认的字符编码是UTF-8，如果前端页面是GB2312或者其它编码，显示获取的数据就是乱码。通过XMLHTTPRequest，POST的数据也是UTF-8编码，如果后台是GB2312或者其他编码也会出现乱码。解决方法：</p>
<ol>
<li>统一到UTF-8。这也是国际化的必然趋势。</li>
<li>输出通过XMLHttpRequest获取的文本文本时，在headers中增加文本声明(直接HTML声明没有作用)。如：
<pre><code>PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset = "GB2312"
JSP:response.setHeader("Charset","GB2312");</code></pre>
</li>
<li>WWW服务器上强制声明。比如：apache下的配置：<code>AddDefaultCharset GB2312</code>这种情况主要是应对通过XMLHttpRequest访问的文件是静态文件，无法声明headers的情况下。<br />&nbsp;&nbsp;静态页面一般都会经过Apache的deflate或gzip压缩，此时在上面情况下IE中，首次通过XMLhttpRequest获得的数据可以正常显示，但再获取数据显示时出现乱码，这次因为再次获取的数据来自缓存，可能由于浏览器解压缩的问题导致Apache设置的默认编码声明丢失。由于这种情况下一般是纯文本，可能还无法禁止缓存，可以设置XMLhttpRequest访问的文本文件不压缩来解决这个问题。</p>
<li>非UTF-8页面通过XMLHttpRequest获取的文本文本输出前字符转码成unicode，或者编码直接是UTF-8，可以正常显示。<strong>如<a href="http://dancewithnet.com/lab/2007/09/ajax-tips/" class="link-btn">实例</a>所示。</strong></li>
</ol>
<h3>IE下的缓存问题</h3>
<p>由于IE的缓存处理机制问题，每次通过XMLHttpRequest访问动态页面返回的总是首次访问的内容，解决方法有：</p>
<ol>
<li>客户端通过添加随机字符串解决。如：
<pre><code>var url = 'http://dancewithnet.com/';
url +=  '?temp=' + new Date().getTime();
url +=  '?temp=' + Math.random();
</code></pre>
</li>
<li>在HTTP headers禁止缓存。如：
<pre><code>
HTTP:
&lt;meta http-equiv="pragma" content="no-cache" /&gt;
&lt;meta http-equiv="Cache-Control" content="no-cache, must-revalidate" /&gt;
&lt;meta http-equiv="expires" content="Thu, 01 Jan 1970 00:00:01 GMT" /&gt;
&lt;meta http-equiv="expires" content="0" /&gt;

PHP：
header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

ASP：
Response.expires=0
Response.addHeader("pragma","no-cache")
Response.addHeader("Cache-Control","no-cache, must-revalidate")

JSP：
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");
</code></pre>
</li>
<li>在XMLHttpRequest发送请求之前加上：
<pre><code>XMLHttpRequest.setRequestHeader("If-Modified-Since","0");
XMLHttpRequest.send(null);
</code></pre>
</li>
</ol>
<h3>IE下的reponseXML问题</h3>
<p>使用responseXML时，IE下只能接受.xml为后缀的XML文件，如果不能以.xml文件为结尾的，则需要如下处理：</p>
<ol>
<li>在服务器端声明是xml文件类型。如
<pre><code>
PHP:header("Content-Type:text/xml;charset=utf-8");
ASP:Response.ContentType = "text/xml";
JSP:response.setHeader("ContentType","text/xml");</code></pre>
<p></code></pre>
</li>
<li>利用responseText获取，然后封装成XML。</li>
<li>在AJAX应用上，<a href="http://json.org/">JSON</a>和<a href="http://jsonml.org/">JsonML</a>是XML非常好的替代品。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/09/25/ajax-tips/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>让网页上传文件控件只能选择不能编辑</title>
		<link>http://dancewithnet.com/2007/09/15/make-upload-input-enable-but-uneditable/</link>
		<comments>http://dancewithnet.com/2007/09/15/make-upload-input-enable-but-uneditable/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 20:30:06 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[contenteditable]]></category>
		<category><![CDATA[Firfox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[keydown]]></category>
		<category><![CDATA[keypress]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[上传文件]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2007/09/15/make-upload-input-enable-but-uneditable/</guid>
		<description><![CDATA[使用网页上传文件控件（&#60;input type=&#8221;file&#8221; /&#62;）时，为了减少用户无意操作而导致上传路径错误，降低服务端无效请求的压力，会要求其只能通过“浏览&#8230;”按钮选择，而不能通... ]]></description>
			<content:encoded><![CDATA[<p>使用网页上传文件控件（&lt;input type=&#8221;file&#8221; /&gt;）时，为了减少用户无意操作而导致上传路径错误，降低服务端无效请求的压力，会要求其只能通过“浏览&#8230;”按钮选择，而不能通过输入框直接输入和编辑。</p>
<p>虽然&lt;input type=&#8221;file&#8221; /&gt;有一个属性readonly，但是当这个属性生效时，IE下不仅不能编辑，也不能通过“浏览&#8230;”按钮选择，而在Firefox和Opera下完全没有任何作用。所以只能通过其他手段来达到目的了，即阻止通过键盘或鼠标对文件输入框的操作。有如下三种方法：<span id="more-1131"></span></p>
<h3>方法1：直接通过Javascript阻止通过键盘或鼠标对文件输入框的操作</h3>
<ol>
<li>利用IE独有的<a href="http://howto.redcomputer.net/html/contenteditable.php">contenteditable</a>属性能阻止输入框被编辑，同时给上传文件控件加入keydown时执行click方法，相当于鼠标点击了“浏览&#8230;”按钮。</li>
<li>Firefox下上传文件控件不支持click方法，只能发生keydown事件时让上传文件控件获取焦点（“浏览&#8230;”按钮获取焦点）来阻止键盘的输入，但是当输入框获取焦点时，按下退格键(backspace)时，会发生“返回上一页”的默认动作，需要额外处理。<br />但是，这种处理阻止不了通过菜单栏上的粘贴和剪切按钮对文件输入框的编辑。</li>
<li>由于<a href="http://www.cnblogs.com/rickel/archive/2007/06/30/800861.html">键盘事件的不同</a>，Opera下需要处理keypress事件来阻止键盘的输入。<br />但是，这个方法阻止不了退格键、删除键和右键粘贴剪切菜单对文本输入框的编辑。</li>
</ol>
<p>请看<a href="http://dancewithnet.com/lab/2007/09/make-upload-input-enable-but-uneditable/#case1" class="link-btn">方法1的演示实例</a></p>
<h3>方法2：利用浮动层遮盖住上传文件控件的输入框部分</h3>
<ol>
<li>Firefox和Opera下通过scrollWidth和scrollHeight来获取上传文件控件的大小，然后减去按钮部分，建立一个div层遮盖其输入框部分。<br /><strong>但是，当通过键盘或者鼠标缩放网页的时候，覆盖层会错位，需要刷新才会重新复位。</strong></li>
<li>IE下scrollWidth和scrollHeight获取的数值有问题，所以采用方法1的解决方案。</li>
</ol>
<p>请看<a href="http://dancewithnet.com/lab/2007/09/make-upload-input-enable-but-uneditable/#case2" class="link-btn">方法2的演示实例</a></p>
<h3>方法3：用input和button伪装成上传文件控件，真正的上传文件控件透明的浮动在其上面</h3>
<p>对于上传文件控件的处理方式和方法1一样，但是因为伪装的原因，可以解决方法1中Opera下退格键、删除键和剪切按钮对文本框的编辑，但是依旧解决不了Firefox粘贴按钮和Opera下右键粘贴按钮对其的编辑。</p>
<p>其实这个方法的最大好处就是可以随心所欲的<a href="http://www.quirksmode.org/dom/inputfile.html">修改上传文件控件的样式</a>。</p>
<p>请看<a href="http://dancewithnet.com/lab/2007/09/make-upload-input-enable-but-uneditable/#case3" class="link-btn">方法3的演示实例</a></p>
<h3><ins title="对Javascript代码的补充说明" datatime="20070920T030200+08:00">方法4：利用CSS，使透明的上传控件只出现按钮部分，且浮动在指定按钮的上面</ins></h3>
<p>因为也是伪装，所以也可以随心所欲的控制样式，这个方法应该是比较彻底的实现了只选择不能编辑的目标。需要注意的是通过设置上传控件的font-size，可以改变它的大小。（多谢小马和许湛）</p>
<p>请看<a href="http://dancewithnet.com/lab/2007/09/make-upload-input-enable-but-uneditable/#case4" class="link-btn">方法4的演示实例</a></p>
<p><ins title="对Javascript代码的补充说明" datatime="20070916T231600+08:00">ps,javascript代码是基于YUI的，目的是为了说明解决思路，转化为其他框架或者脱离框架都很容易。</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/09/15/make-upload-input-enable-but-uneditable/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>跨浏览器的CSS固定定位{position:fixed}</title>
		<link>http://dancewithnet.com/2007/04/19/cross-brower-css-fixed-position/</link>
		<comments>http://dancewithnet.com/2007/04/19/cross-brower-css-fixed-position/#comments</comments>
		<pubDate>Wed, 18 Apr 2007 17:00:42 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[position:fixed]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/2007/04/19/cross-brower-css-fixed-position/</guid>
		<description><![CDATA[不知道您是否留意了，浏览本站时，浏览器右下角有一个标着top的黑色直角三角形，可以点击它返回到正在浏览的网页页眉。当滚动网页时，它的位置一直没有任何改变，您感觉它怎么样？这... ]]></description>
			<content:encoded><![CDATA[<p>不知道您是否留意了，浏览<a href="http://dancewithnet.com">本站</a>时，浏览器右下角有一个标着top的黑色直角三角形，可以点击它返回到正在浏览的网页页眉。当滚动网页时，它的位置一直没有任何改变，您感觉它怎么样？这就是通过CSS的定位属性{position:fixed}来实现的，通过它可以让HTML元素脱离文档流固定在浏览器的某个位置。<span id="more-988"></span></p>
<ol>
<li>IE7、Firefox、Opera，都支持CSS的{position:fixed}，所以很容易实现（<a href="http://andymao.com/andy/post/70.html">《详解定位与定位应用》</a>）</li>
<li>IE6不支持该属性，但是在使用!DOCTYPE 声明指定<a href="http://msdn2.microsoft.com/en-us/library/bb250395.aspx">standards-compliant（标准）模式</a>可以通过CSS hack实现</li>
<li>上述声明下IE5和IE5.5目前没有发现通过纯粹CSS能够解决的方案，但是<a href="http://www.gunlaug.no/contents/wd_additions_15.html">可以通过IE特有的expression在CSS中实现</a>（移动网页时固定元素会动），这和常见浮动Logo广告利用Javascript实现原理是一样的，只不过可以直接写在CSS中比较简便的</li>
<li>利用IE独有的<a href="/2006/06/06/ie-conditional-comments/">条件注释语句</a>可以针对不同的IE版本精确设置，同时避免了这些代码被其他浏览器读到，个人认为比纯粹的CSS Hack好，如果你安装了多个IE（包括绿色版本），条件注释将会以最高版本的IE为标准。</li>
</ol>
<p>实现代码如下：</p>
<pre><code>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
<span>......</span>
&lt;style type=&quot;text/css&quot;&gt;
#fixed{position:fixed;top:5em;right:0;<span>......</span>}   <span>针对IE7、Opera、Firefox一行搞定</span>
&lt;/style&gt;
<span>IE6中利用容器对溢出内容的处理方式来实现的</span>
&lt;!--[if IE 6]&gt;
&lt;style type=&quot;text/css&quot;&gt;
html{overflow:hidden;}
body{height:100%;overflow:auto;}
#fixed{position:absolute;right:17px;}
<span>fixed元素的绝对位置是相对于HTML元素来说，滚动条是body元素的，这是设置right:17px的原因</span>
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;!--[if lt IE 6]&gt;
&lt;style type=&quot;text/css&quot;&gt;
#fixed{position:absolute;top:expression(eval(document.body.scrollTop + 50));}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;wrapper&quot;&gt;
<span>......</span>
&lt;/div&gt;
&lt;div id=&quot;fixed&quot;&gt;&lt;h2&gt;{position:fixed}&lt;/h2&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p><a href="http://dancewithnet.com/lab/2007/04/fixed-position/1.html" class="link-btn"><strong>代码演示1</strong></a>（单个IE，纯粹通过条件注释区分IE浏览器）</p>
<p><a href="http://dancewithnet.com/lab/2007/04/fixed-position/2.html" class="link-btn"><strong>代码演示2</strong></a>（多个IE，通过条件注释+CSS hack区分IE浏览器，明显的比纯粹条件注释复杂且不易读，放上来主要是便于同个PC拥有多个IE浏览器朋友[一般应该做是web开发的]可以直接看到效果，下同。）</p>
<p>或许有人像我一样，在!DOCTYPE 声明是XHTML1.0 Strict或者是XHTML1.1时，喜欢在声明前面加上XML Prolog(如：&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;)，但此时IE7以下都处于Quirks（兼容）模式，所以上述针对IE6的Hack失效，这个时候你可以对IE6也通过expression来实现。</p>
<p>当IE6处于quriks模式时，IE6和IE5.5对CSS解析方式几乎雷同，所以当看到<a href="http://tagsoup.com/cookbook/css/fixed/">《position:fixed for Internet Explorer》</a>时，我找到了在Quirks模式下IE6/IE5.5/IE5统一的CSS解决方案：</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot;
&quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;zh&quot; lang=&quot;zh&quot;&gt;
&lt;head&gt;
<span>......</span>
&lt;!--[if lt IE 7]&gt;
&lt;style type=&quot;text/css&quot;&gt;
body{overflow:hidden;}
#wrapper{height:100%;overflow:auto;}
#fixed{position:absolute;right:17px;}
&lt;/style&gt;
&lt;![endif]--&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;wrapper&quot;&gt;
<span>......</span>
&lt;/div&gt;
&lt;div id=&quot;fixed&quot;&gt;&lt;h2&gt;{position:fixed}&lt;/h2&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p><a href="http://dancewithnet.com/lab/2007/04/fixed-position/3.html" class="link-btn"><strong>代码演示3</strong></a>（单个IE，纯粹通过条件注释区分IE浏览器）</p>
<p><a href="http://dancewithnet.com/lab/2007/04/fixed-position/4.html" class="link-btn"><strong>代码演示4</strong></a>（多个IE，通过条件注释+CSS hack区分IE浏览器）</p>
<p>对比两个纯粹的CSS hack发现，两个原理似乎相同，在于html元素和body元素的应用和对CSS的{position:fixed}的支持程度上，但是这实际上是一种Hack，基本上不具备通用性，知道这个方法就可以了。需要提醒的是IE6 standards-compliant模式下HTML元素不管给它设置什么样的高度和宽度，它的大小都始终充满整个浏览器的可视区域，而IE5 以及 Quirks 模式下html元素和body元素所有宽高设置都会被忽略而保持充满浏览器的可视区域，更多内容请看<a href="http://old9.blogsome.com/2007/03/14/html-element-in-ie/">《IE 中的 html 元素》</a></p>
<p>或许有人会想，现在可以引入了XML Prolog又能用纯CSS方法解决了IE7以下的问题，这下爽了，但是加上XML Prolog后突然发现IE6处于Quirks模式，以前在standards-compliant模式下的设计又变形了，呵呵，这就是咱们搞IE的下场。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2007/04/19/cross-brower-css-fixed-position/feed/</wfw:commentRss>
		<slash:comments>73</slash:comments>
		</item>
		<item>
		<title>IE中的条件注释</title>
		<link>http://dancewithnet.com/2006/06/06/ie-conditional-comments/</link>
		<comments>http://dancewithnet.com/2006/06/06/ie-conditional-comments/#comments</comments>
		<pubDate>Mon, 05 Jun 2006 19:49:53 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[条件注释]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=903</guid>
		<description><![CDATA[一、条件注释简介

IE中的条件注释（Conditional comments）对IE的版本和IE非IE有优秀的区分能力，是WEB设计中常用的hack方法。
条件注释只能用于IE5以上。
如果你安装了多个IE，条件注释将会以最高... ]]></description>
			<content:encoded><![CDATA[<h3>一、条件注释简介</h3>
<ol>
<li>IE中的条件注释（Conditional comments）对IE的版本和IE非IE有优秀的区分能力，是WEB设计中常用的hack方法。</li>
<li>条件注释只能用于IE5以上。</li>
<li>如果你安装了多个IE，条件注释将会以最高版本的IE为标准。</li>
<li>条件注释的基本结构和HTML的注释(&lt;!&#8211; &#8211;&gt;)是一样的。因此IE以外的浏览器将会把它们看作是普通的注释而完全忽略它们。</li>
<li>IE将会根据if条件来判断是否如解析普通的页面内容一样解析条件注释里的内容。</li>
</ol>
<p><span id="more-903"></span></p>
<h3>二、条件注释属性</h3>
<ul>
<li>gt : greater than，选择条件版本以上版本，不包含条件版本</li>
<li>lt : less than，选择条件版本以下版本，不包含条件版本</li>
<li>gte : greater than or equal，选择条件版本以上版本，包含条件版本</li>
<li>lte : less than or equal，选择条件版本以下版本，包含条件版本</li>
<li>! : 选择条件版本以外所有版本，无论高低</li>
</ul>
<h3>三、条件注释使用方法</h3>
<p>注意把代码中的&lt;&gt;换成英文中相应的大于或小于号</p>
<pre><code>&lt;!--[if IE 5]&gt;仅IE5.5可见&lt;![endif]--&gt;
&lt;!--[if gt IE 5.5]&gt;仅IE 5.5以上可见&lt;![endif]--&gt;
&lt;!--[if lt IE 5.5]&gt;仅IE 5.5以下可见&lt;![endif]--&gt;
&lt;!--[if gte IE 5.5]&gt;IE 5.5及以上可见&lt;![endif]--&gt;
&lt;!--[if lte IE 5.5]&gt;IE 5.5及以下可见&lt;![endif]--&gt;
&lt;!--[if !IE 5.5]&gt;非IE 5.5的IE可见&lt;![endif]--&gt;</code></pre>
<p>下面的代码是在非IE浏览器下运行的条件注释</p>
<pre><code>&lt;!--[if !IE]&gt;&lt;!--&gt;
您使用不是 Internet Explorer
&lt;!--&lt;![endif]--&gt;
&lt;!--[if IE 6]&gt;&lt;!--&gt;
您正在使用Internet Explorer version 6或者 一个非IE 浏览器
&lt;!--&lt;![endif]--&gt;</code></pre>
<h3>参考</h3>
<ul class="refer">
<li>[1]<a href="http://www.surfchen.org/?p=94">IE中的条件注释</a></li>
<li>[2]<a href="http://www.blueidea.com/tech/site/2006/3561.asp">条件注释理论及实践</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2006/06/06/ie-conditional-comments/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>IE ActvieX更新产生影响的解决办法</title>
		<link>http://dancewithnet.com/2006/04/20/solution-after-ie-activex-updated/</link>
		<comments>http://dancewithnet.com/2006/04/20/solution-after-ie-activex-updated/#comments</comments>
		<pubDate>Wed, 19 Apr 2006 18:15:53 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[Javascript & DOM & AJAX]]></category>
		<category><![CDATA[ActiveX]]></category>
		<category><![CDATA[document.write]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=899</guid>
		<description><![CDATA[一、问题背景和影响范围
由于专利问题，Microsoft 将被迫更改 IE 处理 ActiveX 控件的交互方式。所以Microsoft 即将发布一个用于 Microsoft Windows XP Service Pack 2 (SP2) 和 Microsoft Windows Server 2003 Service Pack 1... ]]></description>
			<content:encoded><![CDATA[<h3>一、问题背景和影响范围</h3>
<p>由于<a href="http://www.eweek.com/article2/0%2c1895%2c1895907%2c00.asp">专利问题</a>，Microsoft 将被迫<a href="http://msdn.microsoft.com/ieupdate/">更改 IE 处理 ActiveX 控件的交互方式</a>。所以Microsoft 即将发布一个用于 Microsoft Windows XP Service Pack 2 (SP2) 和 Microsoft Windows Server 2003 Service Pack 1 (SP1) 的 Microsoft Internet Explorer 6 的软件更新。据悉该更新将于6月2日正式开始。此更新可更改 Internet Explorer 处理某些使用 ActiveX 控件的网页的方式。<span id="more-899"></span>使用 ActiveX 控件的程序包括以下这些：</p>
<ul>
<li>Adobe Reader</li>
<li>Apple QuickTime Player</li>
<li>Macromedia Flash</li>
<li>Microsoft Windows Media Player</li>
<li>Real Networks RealPlayer</li>
<li>Sun Java Virtual Machine</li>
</ul>
<p>安装此更新后，在启用 ActiveX 控件之前，您无法从某些网页与这些控件交互。要启用 ActiveX 控件，请手动单击该控件。Web 开发人员还可以使用其他技术来更新他们的网页。有关这些技术的更多信息，请访问下面的 MSDN 网站：<a href="http://msdn.microsoft.com/ieupdate">http://msdn.microsoft.com/ieupdate</a></p>
<p>作为此 Internet Explorer 更新的一部分，Microsoft 会将更新发布到 Windows XP 和 Windows Server 2003 的当前版本中。所有客户端操作系统都将得到更新。这些客户端操作系统包括：</p>
<ul>
<li>Windows XP Starter Edition </li>
<li>Windows XP Home Edition </li>
<li>Windows XP Professional Edition </li>
<li>Windows XP Tablet PC Edition </li>
<li> Windows XP Media Center Edition </li>
<li>Windows XP Professional for Embedded Systems</li>
</ul>
<p>目前，Microsoft 尚未发布针对早期版本的 Internet Explorer、Windows Server 2003 或 Windows XP 的更新。但 Microsoft 以后可能会发布针对这些早期版本的更新。</p>
<h3>二、产生的问题和表现</h3>
<p>当网页用APPLET、EMBED和OBJECT标签下载的activeX控件，在控件的用户接口在用户激活之前是被阻止的。如果一个页面用这些标签下载多个控件，每个控件都需要分别被激活。</p>
<p><img src='http://dancewithnet.com/wp-content/uploads/2007/03/ie-activex-1.jpg' alt='ActiveX未被激活时Flash的显示的效果' class="floatRight" /></p>
<p>当一个控件处于未激活状态，它不会响应用户的输入，它只会执行操作，但不包括交互部分。当一个未激活的控件被创建，IE会用不同的技术来阻止键盘和鼠标的触发。例如，打开一个包含Flash的页面，Flash开始播放，但是它不会相应用户的交互请求，比如点击这个Flash而跳转到相应的URL，而是出现一个“单击以激活并使用此控件”，只有点击出发该控件，再次单击才出发跳转。</p>
<p>注意，控件不响应用户的直接交互，但相应脚本的请求。</p>
<p>激活一个交互控件可以点击，也可以通过Tab键设定焦点后按回格（Backspace）键或回车（Enter）键。</p>
<p><img src='http://dancewithnet.com/wp-content/uploads/2007/03/ie-activex-2.gif' alt='一些独立窗口的控件在IE中运行之前，会出现一个提示。' class="floatRight" /></p>
<p>一些独立窗口的控件在IE中运行之前，会出现一个提示。用户需要点击信息窗口中的按钮来运行这个控件。控件下载后，不在需要激活。</p>
<p class="clear">下面的控件具有这种行为：</p>
<ul>
<li>Virtools™ Web Player from Virtools SA</li>
<li>Macromedia Shockwave Player™ from Adobe Systems Inc.</li>
<li>QuickTime™ from Apple Computer, Inc.</li>
</ul>
<p>所以页面运行时可能出现的问题有：</p>
<dl>
<dt>滚动</dt>
<dd>当使用鼠标轮在包含交互式控件的页面中滚动时，该控件可能无法正确显示。</dd>
<dt>抽象窗口工具包</dt>
<dd>据报告，在用户界面中使用抽象窗口工具包 (AWT) 类的 Java 程序中存在访问冲 </dd>
<dt>透明 Flash</dt>
<dd>整页广告虽然消失，但焦点框仍在。在这种情况下，控件仍在原位置，但却是透明的。因此，关联的覆盖窗口留  在页面上。</dd>
<dt>DHTML 菜单</dt>
<dd>当展开一个 DHTML 菜单时，该菜单可能出现在 ActiveX 控件的顶部。在这种情况下，如果单击该菜单，则会启用该控件而不是访问 DHTML 菜单。覆盖窗口具有最高的 Z 顺序。因此，此窗口收到鼠标单击消息。</dd>
<dt>在加载之前进行提示的控件</dt>
<dd>在将某些控件加载到网页时，此更新的功能不会正确屏蔽这些控件。Macromedia Shockwave Director、QuickTime Player 和 Virtools Web Player 中使用的控件都属于这类控件。当 Windows 确定某个控件处于非活动状态时，系统会在加载该控件之前提示用户。</dd>
<dt>控件上的 CSS 属性</dt>
<dd>对于隐藏的控件，或者显示模式虽然设置为“无”但却具有尺寸大小的控件，当您将指针在它们上面移动时，将显示焦点框。</dd>
</dl>
<h3>三、解决办法</h3>
<p>虽然activeX控件不响应用户的直接交互，但相应脚本的请求，所以目前看到的解决方案都是通过外部的脚本来实现的。</p>
<h4>1、Microsoft的解决方案</h4>
<p>MS建议用外部的JScript文件下载控件实现用户可以直接和控件交互的问题。这个JScritpt文件必须是外部文件，如果直接写入网页HTML文件中，将不起作用。不能用JScript函数或者服务端脚本控制控件是否激活。具体实现方法如下：</p>
<h5>1）使用document.write下载控件。</h5>
<p>注意，不能在外部脚本文件通过 writeln函数来实现，因为该函数是把脚本插入到原始的HTML文档中。</p>
<pre><code>&lt;!-- HTML File --&gt;
&lt;html&gt;
  &lt;body leftmargin=0 topmargin=0 scroll=no&gt;
    &lt;script src="Embed.js"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<pre><code><span>// embed.js</span>
document.write('&lt;embed src="examplecontrol"&gt;')
</code></pre>
<p>外部文件也可以通过修改一个标签的outerHTML的属性来实现。</p>
<pre><code>&lt;!-- HTML File --&gt;
&lt;html&gt;
  &lt;body&gt;
    &lt;div&gt;
      &lt;script src="embedControlOuterHTML.js"&gt;&lt;/script&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<pre><code><span>// embedControlOuterHTML.js</span>
embedControlLocation.outerHTML = '&lt;embed src="examplecontrol"&gt;';
</code></pre>
<h5>2）用 document.createElement创建Object标签下载activeX控件。</h5>
<p>注意：当用document.createElement在一个页面创建Object和Embed标签，要仔细创建标签和初始化它的属性，在通过新标签下载activeX控件前加入页面的DOM中。详细信息可以查看MS的<a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp">createElement文档</a>。</p>
<pre><code>&lt;!-- HTML File --&gt;
&lt;html&gt;
  &lt;body&gt;
    &lt;div id="DivID"&gt;
      &lt;script src="createElementExplicit.js"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<pre><code><span>// createElementExplicit.js</span>
var myObject = document.createElement('object');
DivID.appendChild(myObject);
myObject.width = "200";
myObject.height = "100";
myObject.classid= "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6";
myObject.URL = "example.wmv";
myObject.uiMode = "none" ;
</code></pre>
<h5>3）当有特别参数时，用innerHTML和JScript来下载activeX控件。</h5>
<pre><code>&lt;!-- HTML File --&gt;
&lt;html&gt;
 &lt;head&gt;
   &lt;script src="external_script.js" language="JScript"&gt;&lt;/script&gt;
 &lt;/head&gt;
 &lt;body&gt;
   &lt;div id="EXAMPLE_DIV_ID"&gt;
      This text will be replaced by the control
   &lt;/div&gt;
   &lt;script language="JScript"&gt;
     CreateControl( "EXAMPLE_DIV_ID",
                    "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6",
                    "EXAMPLE_OBJECT_ID", "600", "400", "example.wmv",
                    "-1")
   &lt;/script&gt;
 &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<pre><code><span>// external_script.js</span>
function CreateControl(DivID, CLSID, ObjectID,
                       WIDTH, HEIGHT, URL, AUTOSTART)
{
  var d = document.getElementById(DivID);
  d.innerHTML =
    '&lt;object classid=' + CLSID + ' id=' + ObjectID +
    ' width=' + WIDTH + ' height=' + HEIGHT +'&gt;
    &lt;param name="URL" value=' + URL + '&gt;
    &lt;param name="autoStart" value=' + AUTOSTART + '/&gt;';
}
</code></pre>
<h4>2、Adobe的解决方案</h4>
<p>针对其产品 Macromedia Flash, Shockwave, or Adobe Acrobat files的解决方法。</p>
<ol>
<li>当只有一个嵌入内容或少量的嵌入内容时，直接用一个独立的外部JS文件来下载activeX控件。
<ol>
<li>创建外部文件 foo.js
<pre><code>function RunFoo()
{
    document.write('&lt;object classid="clsid:D27CDB6E..." ...&gt;\n');
    document.write('&lt;param name="movie" value="foo.swf" /&gt;\n');
    document.write('&lt;/object&gt;\n');
}
</code></pre>
</li>
<li>把foo.js加入相关页面的head标签中
<pre><code>&lt;script src="[path]/foo.js" type="text/javascript"&gt;&lt;/script&gt;</code></pre>
</li>
<li>用下面代码替换 &lt;object&gt; , &lt;embed&gt; 和 &lt;applet&gt;标签&lt;script type=&#8221;text/javascript&#8221;&gt;RunFoo();&lt;/script&gt;</li>
</ol>
</li>
<li>当嵌入大量的活动内容，且嵌入方式多样，下面是一种很好的解决方案。
<ol>
<li><a href="http://download.macromedia.com/pub/developer/activecontent_samples.zip">下载Adobe提供的必须js文件</a>。该文件包括三个部分：
<ul>
<li><a href="http://www.macromedia.com/devnet/activecontent/articles/devletter.html">AC_RunActiveContent.js</a>：针对 Flash 和 Shockwave 嵌入内容的；</li>
<li><a href="http://www.macromedia.com/devnet/activecontent/articles/devletter.html">AC_ActiveX.js</a>：针对其他的嵌入内容；</li>
<li>SampleActiveContent.html：使用例子。</li>
</ul>
</li>
<li>把AC_RunActiveContent.js加入相关页面的head标签中<code>&lt;script src="[path]/AC_RunActiveContent.js" type="text/javascript"&gt;&lt;/script&gt;</code></li>
<li>用下列函数来表达Object和Embed标签中的内容，并取代相关标签。
<p>用于Flash</p>
<pre><code>AC_FL_RunContent(
    "att1Name","att1Value",
    "att2Name","att2Value",
    ...
    "attnName","attnValue"
);
</code></pre>
<p>用于 Shockwave</p>
<pre><code>AC_SW_RunContent(
    "att1Name","att1Value",
    "att2Name","att2Value",
    ...
    "attnName","attnValue"
);</code></pre>
<p>例如：</p>
<pre><code>
&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"
width="550" height="400" align="middle"&gt;
    &lt;param name="allowScriptAccess" value="sameDomain" /&gt;
    &lt;param name="movie" value="foo.swf" /&gt;
    &lt;param name="quality" value="high" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
&lt;embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="foo" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt;
&lt;/object&gt;
&lt;script type="text/javascript" &gt;
AC_FL_RunContent('codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0',
'width','550','height','400','align','middle','src','foo','quality','high','bgcolor','#ffffff','name','foo',
'allowscriptaccess','sameDomain','pluginspage','http://www.macromedia.com/go/getflashplayer','movie','foo' );
&lt;/script&gt; </code></pre>
</li>
<li>针对不支持script的浏览器，标签表达内容可以放入&lt;noscript&gt;标签中。</li>
</ol>
<h4>3、使用deconcept 的<a href="http://blog.deconcept.com/flashobject/">flashObject</a>。</h4>
<p>flashObject是一个探测和嵌入Flash的javascript脚本。它能够所有在PC和MAC上的主流Flash插件，为嵌入Flash Movie而设计。它有利于搜索引擎，且能通过HTML验证。</p>
<ol>
<li>下载<a href="http://blog.deconcept.com/flashobject/flashobject1-3.zip">FlashObject 1.3</a></li>
<li>把flashobject.js加入页面的head标签中</li>
<li>具体代码如下：
<p>HTML代码</p>
<pre><code>&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab
#version=7,0,19,0" width="550" height="400" align="middle" id="foo"&gt;
    &lt;param name="allowScriptAccess" value="sameDomain" /&gt;
    &lt;param name="movie" value="foo.swf" /&gt;
    &lt;param name="quality" value="high" /&gt;
    &lt;param name="bgcolor" value="#ffffff" /&gt;
&lt;param name="flashvars" value ="variable1=value1&#038;variable2=value2" /&gt;
&lt;embed src="foo.swf" quality="high" bgcolor="#ffffff" width="550"
height="400" name="foo" align="middle" flashvars="variable1=value1&#038;variable2=value2" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt;
&lt;/object&gt;
</code></pre>
<p>flashObject代码：</p>
<pre><code>&lt;div id="flashcontent" style="width: 550px; height: 400px"&gt;&lt;/div&gt;
&lt;script type="text/javascript"&gt;
   var fo = new FlashObject("foo.swf", "foo", "550", "400", "7", "#ffffff");
   fo.addParam("allowScriptAccess", "low");
   fo.addParam("wmode", "sameDomain");
   fo.addParam("quality", "high");
   fo.addVariable("variable1", "value1");
   fo.addVariable("variable2", "value2");
   fo.write("flashcontent");
&lt;/script&gt;
</code></pre>
</li>
<li>更多内容可以查看<a href="http://blog.deconcept.com/swfobject/">flashObject文档</a>。</li>
</ol>
<h3>四、总结</h3>
<p>依据微软的技术信息和上述解决方案来看，解决问题的核心法就是实现active控件下载和主页面分离。其主要办法有两个：</p>
<ol>
<li>利用javascript的document.write或innerHTML把下载activeX控件的标签从页面分离出去。</li>
<li>利用javascript构造activeX控件下载函数，把需要下载的activeX标签属性写入函数。</li>
</ol>
<p>采用js和页面分离是最容易实现的办法。但是从长远和易用性角度来看，应用flashObject类似的方法，是一个很好的选择。</p>
<p>Reference：</p>
<ul class="refer">
<li>[1]<a href="http://support.microsoft.com/kb/912945">Internet Explorer ActiveX 更新</a></li>
<li>[2]<a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp">Activating ActiveX Controls</a></li>
<li>[3]<a href="http://www.adobe.com/devnet/activecontent/articles/devletter.html">Preparing Websites with Active Content for Announced Browser Changes</a></li>
<li>[4]<a href="http://www.adobe.com/devnet/activecontent/articles/devletter.html">FlashObject: Javascript Flash detection and embed script</a></li>
</ul>
<h3>五、更巧妙的方法[2005.05.29]</h3>
<p>今天又发现一种解决方案，；利用原理是一样的，但是解决方案另辟蹊径，显示出非常高的技巧，该方法对原有页面有大量的通过js直接写在主页面上情况提供了非常便捷的解决方案。</p>
<p>使用方法如下：</p>
<h4>1、把下面代码放入一个js文件中。</h4>
<pre><code>if(typeof(dclk_isDartRichMediaLoaded) == "undefined") {
 dclk_isDartRichMediaLoaded = true;
 function dclkWrite(str){
  if(dclk_shouldOverride) {
   dclk_original_documentWrite(str);
  }
  else{
   document.write(str);
  }
 }
 function dclkWriteln(str){
  if(dclk_shouldOverride) {
   dclk_original_documentWriteLn(str);
  }
  else{
   document.writeln(str);
  }
 }
 function dclk_isInternetExplorer() {
  return (navigator.appVersion.indexOf("MSIE") != -1
                       &#038;&#038; navigator.userAgent.indexOf("Opera") < 0);
 }
 dclk_shouldOverride = dclk_isInternetExplorer();
 if(dclk_shouldOverride) {
  dclk_original_documentWrite = document.write;
  dclk_original_documentWriteLn = document.writeln;
  document.write = dclkWrite;
  document.writeln = dclkWriteln;
 }
}
</code></pre>
<h4>2、通过js链接方式把改代码链入到主文件的头部即可。</h4>
<p>注意，该段代码不能直接写入主文件中，也不能跨域调用。</p>
<p>改代码通过链接嵌入的js函数，实现了document.write＆document.writeln方法＆主页面的分离，从而实现了需要触发activeX控件的HTML代码＆主页面分离，非常的精巧。</p>
<p>此代码不能解决一种情况，就是通过innerHTML属性写入需要触发activeX的HTML代码，不过通过上面解决问题的思路，应该也有合适的方法巧妙的解决。</p>
<h3><ins datetime="2007-11-14T00:18:58+08:00">六、又一个巧妙的解决方案，殊途同归<sub>2007.11.14</sub>。</ins></h3>
<p>
<pre><code>
if(window.ActiveXObject){
	var _FLash_Objects=document.all.tags("object");
	for(var i=0;i<_FLash_Objects.length;i++){
		var _t_obj=_FLash_Objects[i];
			_t_obj.outerHTML=_t_obj.outerHTML;
	}
}</code></pre>
</p>
<p><ins datetime="2007-11-14T00:264:58+08:00">ps，来自IEBlog的一个好消息：<a href="http://blogs.msdn.com/ie/archive/2007/11/08/ie-automatic-component-activation-changes-to-ie-activex-update.aspx">IE计划从2008年4月起通过升级实现无需点击使用ActiveX控件。</a></ins></p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2006/04/20/solution-after-ie-activex-updated/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>微软的便便</title>
		<link>http://dancewithnet.com/2006/03/31/microsoft-bugs/</link>
		<comments>http://dancewithnet.com/2006/03/31/microsoft-bugs/#comments</comments>
		<pubDate>Thu, 30 Mar 2006 16:27:00 +0000</pubDate>
		<dc:creator>秦歌</dc:creator>
				<category><![CDATA[互联网 & IT]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://dancewithnet.com/?p=231</guid>
		<description><![CDATA[微软最近够郁闷了，开发了5年、耗资60亿美元、达到5000万行的发现数万漏洞的Vista宣布延期推出，一片哗然，甚至出现了报道说有微软的员工说如果此事追究责任CEO应该辞职。但是不管微软的... ]]></description>
			<content:encoded><![CDATA[<p>微软最近够郁闷了，开发了5年、耗资60亿美元、达到5000万行的发现数万漏洞的Vista宣布延期推出，一片哗然，甚至出现了报道说有微软的员工说如果此事追究责任CEO应该辞职。但是不管微软的操作系统如何，但是构建了大多数人的电子信息世界的基础，只能打着补丁用着现有的等着未来的。同样糟糕的还有IE，IE最大的特色就是莫名其妙，莫名奇妙的HTML和CSS解析，莫名奇妙的JS错误提示，还有更多的莫名奇妙的编译事件，<span id="more-231"></span>比如说今天，我帮小四同学找IE6.0的下载地址，肯定要去microsoft.com这个全世界流量最大的公司网站了，谁知道打开首页就晕了，怎么微软公司的首页也会出现用老外的话说shit的事情呢？三个广告图片两个图片不显示，刷新几次都如此，晕到。我截了一个图，准备发给bill gates，然后继续工作。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/microsoft-homepage-1.jpg' alt='Microsoft的首页在IE下出问题' /></p>
<p>下午的时候，又帮助另外一个朋友下载IE，突然发现，三个广告图片，两个不显示的显示了，显示的不显示了，刷新依然。<br /><img src='http://dancewithnet.com/wp-content/uploads/2007/03/microsoft-homepage-2.jpg' alt='Microsoft的首页在IE下出问题' /></p>
<p>我就感觉很奇怪了，用Firefox、IE5.5和IE5.0都没有问题，IE6.0下就是有问题，而我的IE6又没有问题，或许这就是所谓的灵异时间吧。操作系统，可能对很多人来讲都不好选择，除了微软，别无分店，但是浏览器还有Firefox，还有Opera，自从Opera免费推出8.0开始，我就一直使用，蛮喜欢的，虽然在某些js下不是特别稳定，但是还是强烈推荐大家使用了，用就用8.5了，这年头还有谁去用6z用的那个7.5呢？IE7.0的beta对CSS2.0的支持，不比6.0强多少，修正了一些bug，最终发布我能期望更多嘛？更不要奢求SVG和E4X的支持了。</p>
]]></content:encoded>
			<wfw:commentRss>http://dancewithnet.com/2006/03/31/microsoft-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

