鄧華

          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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 丹江口市| 二连浩特市| 日照市| 抚松县| 西平县| 北票市| 鹤壁市| 余庆县| 大姚县| 滦平县| 兴和县| 泗阳县| 米易县| 卢龙县| 恩施市| 五河县| 绍兴市| 镇江市| 新巴尔虎左旗| 金华市| 彩票| 南乐县| 锦州市| 萝北县| 车险| 莱芜市| 鸡泽县| 万州区| 商水县| 宁蒗| 衡阳市| 夏河县| 大港区| 湛江市| 桐梓县| 高阳县| 徐水县| 蛟河市| 黄山市| 泗水县| 永定县|