`
zhangyaochun
  • 浏览: 2620325 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于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();
}
 
  
 

 

2
0
分享到:
评论
3 楼 zhuzhuaijq 2014-02-24  
   
2 楼 zhangyaochun 2011-10-18  
Hafeyang 写道
恩。不错。

感谢来访博客,多多提意见,谢谢
1 楼 Hafeyang 2011-10-17  
恩。不错。

相关推荐

    JavaScript动态添加css样式和script标签

    3. **事件监听:** 如果需要在脚本加载完成后执行某些操作,可以使用`script.onload`或`script.onreadystatechange`事件。 4. **兼容性:** 这些方法适用于所有现代浏览器,但在一些较旧或非主流的浏览器中可能需要...

    JavaScript — 原生对象和方法1

    DOCTYPE html&gt;`声明了文档类型,`&lt;link&gt;`用于引入样式表,`&lt;script&gt;`标签可以设置`defer`或`async`属性来控制脚本加载时机。 总的来说,JavaScript的原生对象和方法构成了其强大的功能基础,它们在DOM操作、HTTP...

    动态加载JavaScript文件的3种方式

    这段代码定义了一个名为loadJs的函数,它创建了一个script元素,并为它添加了一个onload事件处理器或一个onreadystatechange事件处理器,以确保在文件加载完成后执行回调函数。然后将script元素添加到了document....

    javascript开发随笔二 动态加载js和文件

    此外,为了实现组件的按需卸载,`bus.removeUi`函数被用来移除已加载的JS和CSS文件,通过删除对应的`&lt;script&gt;`和`&lt;link&gt;`标签,以及清除加载记录。 动态加载JS和文件还有其他高级技巧,例如: 1. **模块化加载**:...

    异步动态加载js与css文件的js代码

    这段代码创建一个`&lt;script&gt;`元素,设置其`onreadystatechange`和`onload`事件处理函数,以检测文件是否已加载。同时,它还设置了一个超时函数`doError`,以防文件加载失败。这种方法对加载过程进行了更细致的控制,...

    动态加载js、css的简单实现代码

    在上述代码中,通过给`&lt;script&gt;`标签添加`onload`和`onreadystatechange`事件监听器,我们可以知道何时脚本加载完成并执行回调函数。 接下来,我们看看使用jQuery来实现动态加载资源的方法。jQuery提供了一种更加...

    javascript 使用技巧

    使用`&lt;script&gt;`标签的`archive`属性可以将多个JS文件打包为一个压缩文件,但该属性同样不被现代浏览器支持: ```html &lt;script archive="utils.jar" src="animation.js"&gt;&lt;/script&gt; ``` #### 8. 获取当前选中文本 ...

    动态加载js、css的实例代码

    它还添加了`onload`和`onreadystatechange`事件处理程序,以确保在js文件加载完成并执行回调函数时,脚本可以正确处理。如果是css文件,则直接创建一个`link`元素并设置其`rel`和`href`属性,然后将其追加到`head`...

    js使用小技巧

    JavaScript是Web开发中不可或缺的一部分,这里我们探讨一些实用的小技巧,可以帮助你提升代码效率和用户体验。 1. **设置收藏图标**: 在HTML头部添加`&lt;link&gt;`标签,可以为浏览器收藏夹设置自定义图标,例如: ``...

    多浏览器兼容的动态加载 JavaScript 与 CSS第1/2页

    总结来说,`ensure`工具通过创建元素并插入到DOM中来实现动态加载,对于不支持`onload`或`onreadystatechange`的浏览器,如Safari 2,它采用其他方法来检测加载状态。虽然大部分浏览器对此处理相对简单,但像IE6这样...

    动态加载js、css等文件跨iframe实现

    1. 使用JavaScript原生方法或jQuery创建和添加`&lt;script&gt;`和`&lt;link&gt;`标签。 2. 监听加载状态以确保文件已加载。 3. 使用`window.parent`、`window.top`、`frames`或`window.frames`进行跨iframe通信。 4. 使用`post...

    JS 动态加载js文件和css文件 同步/异步的两种简单方式

    对于js文件,创建`&lt;script&gt;`元素并监听`onload`或`onreadystatechange`事件;对于css和less文件,创建`&lt;link&gt;`元素。将文件路径添加到`classcodes`数组中可以避免重复加载同一个文件。 3. **文件加载判断**: 在...

    pjblog中的UBBCode.js

    加载过程根据文件扩展名决定创建`&lt;script&gt;`还是`&lt;link&gt;`标签,同时根据浏览器类型设置合适的事件监听器,以确保脚本加载完成后的回调处理。 通过以上对`pjblog中的UBBCode.js`的知识点解析,我们可以看到这款脚本...

Global site tag (gtag.js) - Google Analytics