高性能JS--载入脚本并执行

  1. 一般现代浏览器通过侦听事件获得脚本加载完成时的状态

    复制代码
    var  script  =  document.createElement( ' script ' );
    script.type 
    =   ' text/javascript ' ;
    // Firefox, Chrome
    script.onload  =   function (){
      alert(
    ' script loaded! ' );
    };
    script.src 
    =   ' http://code.jquery.com/jquery-1.4.2.min.js ' ;
    document.getElementsByTagName(
    ' head ' )[ 0 ].appendChild(script);
    复制代码
  2. ie支持另外一种方式,会触发readystatechange事件

    loading:开始下载
    complete:所有数据已准备就绪
    复制代码
    var  script  =  document.createElement( ' script ' );
    script.type 
    =   ' text/javascript ' ;
    // IE
    script.onreadystatechange  =   function (){
        
    if (script.readyState  ==   ' loaded '   ||  script.readyState  ==   ' complete ' ){
            script.onreadystatechange 
    =   null ;
            alert(
    ' Script loaded ' );
        }
    }
    script.src 
    =   ' http://code.jquery.com/jquery-1.4.2.min.js ' ;
    document.getElementsByTagName(
    ' head ' )[ 0 ].appendChild(script);
    复制代码

  3. 兼容方法

    复制代码
    /* *
    * 载入脚本
    * @param {String} url 载入的地址
    * @param {Function} callback 载入后需执行的函数
    */
    function  loadScript(url, callback){
      
    var  script  =  document.createElement( ' script ' );
      script.type 
    =   ' text/javascript ' ;
      
    // IE
       if (script.readyState){
          script.onreadystatechange 
    =   function (){
              
    if (script.readyState  ==   ' loaded '   ||  script.readyState  ==   ' complete ' ){
                  script.onreadystatechange 
    =   null ;
                  callback();
              }
          }
      } 
    else  {  // 非IE
          script.onload  =   function (){
              callback();
          }
      }
      script.src 
    =   null ;
      document.getElementsByTagName(
    ' head ' )[ 0 ].appendChild(script);
    }
    // example
    loadScript( ' http://code.jquery.com/jquery-1.4.2.min.js ' function (){
      alert(
    ' File is loaded! ' );
    })
    复制代码

  4. XMLRequest脚本注入

    复制代码
    var  xhr  =   new  XMLHttpRequest();
    xhr.open(
    ' get ' ' http://code.jquery.com/jquery-1.4.2.min.js ' true );
    xhr.onreadystatechange 
    =   function (){
        
    if (xhr.readySate  ==   4 ){
            
    if (xhr.status  >=   200   &&  shr.status  <   300   ||  xhr.status  ==   304 ){  // 200 有效响应; 304 从缓存读取
                 var  script  =  document.createElement( ' script ' );
                script.type 
    =   ' text/javascript ' ;
                script.text 
    =  xhr.responseText;
                document.body.appendChild(script);
            }
        }
    };
    xhr.send(
    null );
    复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值