鄧華

          BlogJava 聯系 聚合 管理
            48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks
          在CMS的plugin計劃中, 需要控制的一項就是頁面的JS PLUGIN的動態加載.
          一次加載幾十個plugin的JS是不現實的.只能在需要用到的時候再加載進來.

          在一個頁面中, 如果我們要加載另外的JS文件進來,有一個方法是

          document.write("<script src=''><\/script>");

          這樣會產生一個異步的JS加載, 可以產生一些有趣的應用, 如AJAX效果,跨域調用.
          但上面產生的問題,是控制性, 無法控制JS的加載狀態及加載順序,而且只能在頁面初始化的時候調用.

          為了解決以上問題,需要設計一個JS的加載控制器及動態加載JS的程序.

          下面的是一段JS的加載代碼:
          CMS.util.LoadScript=function( url ,control)
          {
              
          var oHead = top.document.getElementsByTagName('HEAD').item(0);
              
          var oScript= top.document.createElement("script");
              oScript.type 
          = "text/javascript";
              oScript.src
          =url;
              
             
          if(control){
                  
          function loaded(c){
                      
          if (Prototype.Browser.IE && this.readyState.toLowerCase() != "loaded" && this.readyState.toLowerCase() != "complete") { 
                          
          return
                      }
                      c.next();
                  }
                      Event.observe(oScript,
          "readystatechange",loaded.bind(oScript,control));
                      Event.observe(oScript,
          "load",loaded.bind(oScript,control));
              }
              
               oHead.appendChild( oScript);
          }
          需要用到prototype.js庫.
          在這個方法里面是用的DOM的JS加載方法,利用了script的readystatechange參數,這個參數IE下面的狀態參數. 對應FIREFOX是load參數
          //FIXME firefox的load里面的readyState不起作用,還未找到解決方法.


          參數URL表示要加載的JS, control代表一個控制器,用來控制script的加載是否完成.

          下面是控制器的代碼:
          CMS.util.ScriptLoadControl=function(_array){
                      
          this.a=_array;
                      
          this.i=0;
              }
          CMS.util.ScriptLoadControl.prototype
          ={
              next:
          function(){
                  
          if(this.a.length>this.i){
                      CMS.util.LoadScript(
          this.a[this.i++],this);
                  }
          else{
                      
          return false;
                  }
              }
          }
          其中_array參數是一個保存了url地址的數組.

          在使用的時候,用以下代碼:
          var c=new CMS.util.ScriptLoadControl(plugin_url_array);
                  c.next();

          就可以順序的加載JS,以及保證JS的完全加載成功.



          posted on 2007-11-28 22:40 鄧華的碎碎念 閱讀(3277) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 万年县| 荆门市| 綦江县| 金塔县| 沁水县| 海兴县| 溧水县| 于田县| 大名县| 玉环县| 文成县| 阜南县| 永嘉县| 永济市| 宁晋县| 金塔县| 六枝特区| 莎车县| 昭通市| 乡城县| 石柱| 琼海市| 丹江口市| 镇远县| 赣州市| 大港区| 十堰市| 花莲县| 武汉市| 深水埗区| 萨迦县| 抚顺县| 收藏| 嵊州市| 重庆市| 肃宁县| 大庆市| 宜阳县| 连平县| 廉江市| 甘谷县|