动态同步加载JS脚本

来源:互联网 发布:天国王朝 演员 知乎 编辑:程序博客网 时间:2024/05/01 07:46
脚本
  1. <scripttype="text/javascript">
  2. (function () {
  3.     dsLoadingJS = {
  4.        //获取XMLHttpRequest对象(提供客户端同http服务器通讯的协议)
  5.        getXmlHttpRequest: function () {
  6.            if(window.XMLHttpRequest) // 除了IE外的其它浏览器
  7.               return newXMLHttpRequest();
  8.            else if(window.ActiveXObject) // IE 
  9.               return newActiveXObject("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.            varoXmlHttp = 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('XMLrequest 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.     <divid="divID"></div>
  3.     <scripttype="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
原创粉丝点击