当前位置: 代码迷 >> Web前端 >> 关于link跟script标签的onload与onreadystatechange事件的支持
  详细解决方案

关于link跟script标签的onload与onreadystatechange事件的支持

热度:156   发布时间:2012-09-05 15:19:34.0
关于link和script标签的onload与onreadystatechange事件的支持

研究编写这个专题的心思来源于阳哥分享的javascript加载总结的调研文档。

?

当然这个话题很火也很深,路也很长,开启这个话题,简单地普及一些知识。

?

简单记录,学习一下。

?

开始要说的可能就是onload与onreadystatechange的api支持

?

其实简单地去理解的话,对于外部资源的应用有两个我们head里面常用的标签linkscript

?

测试浏览器版本说明

  • ?Opera ?11.51
  • ?Chrome?6.0.401.1
  • ?FF 3.6.23
a. ?link标签
  • ?link标签的静态支持
?? ?------个人定义的所谓静态其实就是

<link type="text/css" rel="stylesheet" href="****" />
?

?

?? ?1. IE 6/7/8/9多支持onload,

?? ? ? ?Opera支持onload

?? ? ? ?对于onreadystatechange事件,有两个状态readyState(loading,complete)

?

?? ?2. FF/Safari/Chrome不支持onload,

?? ? ? ?也不支持onreadystatechange

?

?

  • link标签的动态支持
?? ?------个人定义的所谓动态是js去创建link标签

<script type="text/javascript">
   /*封装代码
   *创建给定属性的html元素
   *@param type ----创建元素的类型
   *@param attrs ----属性集合
   *@return elment -------带有给定属性的元素对象
   */
    function createTag(type,attrs){
         var element = document.createElement(type),
               item ;
         for(item in attrs){
             //加上一层本地属性的判断
             if(attrs.hasOwnProperty(item)){
                 element.setAttribute(item,attrs[item]);
            }
        }
        return element;
   }

   var link = createTag('link',{
         type : "text/css",
         rel    : "stylesheet",
         href  : "***"
    });
   link.onreadystatechange = function(){
           //执行代码
   }
   link.onload = function(){//执行代码}
   document.getElementsByTagName('head')[0].appendChild(link);
</script>
??1. ?IE 6/7/8/9支持onload和onreadystatechange
??2. ?Opera也支持
??3. ?FF/Chrome/Safai 不支持

b. ?script标签
??
  • ??script的静态支持
??-----所谓的静态就是

<script type="text/javascript" src="**"></script>
?1. ?IE 6/7/8触发onreadystatechange
?2. ?IE 9 先触发onreadystatechange 后触发onload
?3. ?FF/Safari/Chrome/Opera 触发onload


  • ?script的动态支持
ie下的预加载

window.onload = function(){
      var script = document.createElement("script");
      script.setAttribute("type","text/javascript");
      script.onreadystatechange = function(){
          if(this.readyState == 'loaded'){
                   alert("preload");
                   document.getElementsByTagName("head")[0].appendChild(script);
           }else if(this.readyState == "complete"){
               this.onreadystatechange = null;
       }
     }
    script.src="****jquery.min.js?_="+(new Date()).getTime();
}
?
??
?

?

1 楼 Hafeyang 2011-10-17  
恩。不错。
2 楼 zhangyaochun 2011-10-18  
Hafeyang 写道
恩。不错。

感谢来访博客,多多提意见,谢谢
  相关解决方案