关于对defer的理解.

代码
  1. <script defer>  
  2. function init(){   
  3. document.getElementById("div").innerHTML="OK";   
  4. }   
  5. init();   
  6. </script>  
  7. <div id="div">如果你能看到这一句,那就是说没有达到我所要的效果   
  8. <img src="http://icon.ajiang.net/icon_0.gif" />  
  9. </div> 


 

在IE6和FIREFOX2下完全不一样

IE6中最后执行结果是OK,而firefox中是“如果你能看到这一句,那就是说没有达到我所要的效果”

我觉得defer这个东西 有推迟执行的意思,IE6里面先解析完所有html代码再执行defer中的脚本

firefox中 先执行脚本后解析html

不知道这样的理解是否有误?

defer的含义并不是这样的。

在w3c标准中defer的本意只是表示这段脚本不会输出文档内容,所以可以继续解析和呈现。至于执行顺序,完全语焉不详。而且这个属性只是一个hint,没有说必须如此,所以许多浏览器根本不睬这个属性。

但是在defer属性的创造者ms那里,是有execute顺序的,关于defer的稀奇古怪的行为请看:http://www.websiteoptimization.com/speed/tweak/defer/


正在制定的html5有极大可能会完善script标签的定义。

会有两个属性,async和defer。

其中defer将明确为在整个page的parsing结束之后执行(执行时机差不多就是DOMContentLoad或者IE htc的ondocumentready)。并且会严格按照所有defer的script的顺序执行。


posted @ 2007-07-04 18:57  PointNet  阅读(1917)  评论(4编辑  收藏  举报