动态同步加载JS脚本

脚本
  1. <script type="text/javascript">
  2. (function () {
  3.     dsLoadingJS = {
  4.         //获取XMLHttpRequest对象(提供客户端同http服务器通讯的协议)
  5.         getXmlHttpRequest: function () {
  6.             if (window.XMLHttpRequest) // 除了IE外的其它浏览器
  7.                 return new XMLHttpRequest();
  8.             else if (window.ActiveXObject) // IE 
  9.                 return new ActiveXObject("MsXml2.XmlHttp");
  10.         },

  11.         //导入内容
  12.         includeJsText: function (rootObject, jsText) {
  13.             if (rootObject != null) {
  14.                 var oScript = document.createElement_x("script");
  15.                 oScript.type = "text/javascript";
  16.                 oScript.text = jsText;
  17.                 rootObject.appendChild(oScript);
  18.             }
  19.         },

  20.         //导入文件
  21.         includeJsSrc: function (rootObject, fileUrl) {
  22.             if (rootObject != null) {
  23.                 var oScript = document.createElement_x("script");
  24.                 oScript.type = "text/javascript";
  25.                 oScript.src = fileUrl;
  26.                 rootObject.appendChild(oScript);
  27.             }
  28.         },

  29.         //同步加载
  30.         addJs: function (rootObject, url) {
  31.             var oXmlHttp = this.getXmlHttpRequest();

  32.             oXmlHttp.onreadystatechange = function ()  //其实当在第二次调用导入js时,因为在浏览器当中存在这个*.js文件了,它就不在访问服务器,也就不在执行这个方法了,这个方法也只有设置成异步时才用到        
  33.             {
  34.                 if (oXmlHttp.readyState == 4) //当执行完成以后(返回了响应)所要执行的        
  35.                 {
  36.                     if (oXmlHttp.status == 200 || oXmlHttp.status == 304) //200有读取对应的url文件,404表示不存在这个文件        
  37.                     {
  38.                         this.includeJsSrc(rootObject, url);
  39.                     }
  40.                     else {
  41.                         alert('XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')');
  42.                     }
  43.                 }
  44.             }

  45.             //1.True 表示脚本会在 send() 方法之后继续执行,而不等待来自服务器的响应,并且在open()方法当中有调用到onreadystatechange()这个方法。通过把该参数设置为 "false",可以省去额外的 onreadystatechange 代码,它表示服务器返回响应后才执行send()后面的方法.
  46.             //2.同步执行oXmlHttp.send()方法后oXmlHttp.responseText有返回对应的内容,而异步还是为空,只有在oXmlHttp.readyState == 4时才有内容,反正同步的在oXmlHttp.send()后的操作就相当于oXmlHttp.readyState == 4下的操作,它相当于只有了这一种状态.
  47.             oXmlHttp.open('GET', url, false); //url为js文件时,ie会自动生成 '<script src="*.js" type="text/javascript"></script>',ff不会  
  48.             oXmlHttp.send(null);
  49.             this.includeJsText(rootObject, oXmlHttp.responseText);
  50.         }
  51.     }
  52. })();
  53. </script>

调用方法:
  1. <body>
  2.      <div id="divID"></div>
  3.      <script type="text/javascript">
  4.          var rootObject = document.getElementByIdx_x("divID");
  5.          dsLoadingJS.addJs(rootObject, "skin.js");                                                          //dsLoadingJS.addJs(rootObject,"http://www.sina.com.cn/article/skin.js"); 
  6.     </script>
  7. </body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值