JS 動態加載js文件和css 文件 同步/異步 兩種方式


 1 /*動態添加js或css,URL:文件路徑,FileType:文件類型(js/css)*/
 2 function AddJsFiles(URL,FileType){
 3     var oHead = document.getElementsByTagName('HEAD').item(0);
 4     var addheadfile;
 5     if(FileType=="js"){
 6         addheadfile= document.createElement("script");
 7         addheadfile.type = "text/javascript";
 8         addheadfile.src=URL;
 9     }else{
10         addheadfile= document.createElement("link");
11         addheadfile.type = "text/css";
12         addheadfile.rel="stylesheet";
13         addheadfile.rev = "stylesheet";
14         addheadfile.media = "screen";
15         addheadfile.href=URL;
16     }
17     oHead.appendChild( addheadfile);
18 }
1  /*方法調用*/
2     AddJsFiles("js/index.js","js");
3     AddJsFiles("css/index.css","css");
 
   經測試發現以上方法進行文件加載時,文件是異步加載的,這樣就可能導致加載文件后立即使用文件中的方法或變量會產生錯誤的情況,
所以以下采用同步加載的方法,當文件加載完成后再去執行相應的代碼或方法
 
/*5.加載文件*/
/* 已加載文件緩存列表,用於判斷文件是否已加載過,若已加載則不再次加載*/
var classcodes =[];
window.Import={
    /*加載一批文件,_files:文件路徑數組,可包括js,css,less文件,succes:加載成功回調函數*/
    LoadFileList:function(_files,succes){
        var FileArray=[];
        if(typeof _files==="object"){
            FileArray=_files;
        }else{
            /*如果文件列表是字符串,則用,切分成數組*/
            if(typeof _files==="string"){
                FileArray=_files.split(",");
            }
        }
        if(FileArray!=null && FileArray.length>0){
            var LoadedCount=0;
            for(var i=0;i< FileArray.length;i++){
                loadFile(FileArray[i],function(){
                    LoadedCount++;
                    if(LoadedCount==FileArray.length){
                        succes();
                    }
                })
            }
        }
        /*加載JS文件,url:文件路徑,success:加載成功回調函數*/
        function loadFile(url, success) {
            if (!FileIsExt(classcodes,url)) {
                var ThisType=GetFileType(url);
                var fileObj=null;
                if(ThisType==".js"){
                    fileObj=document.createElement('script');
                    fileObj.src = url;
                }else if(ThisType==".css"){
                    fileObj=document.createElement('link');
                    fileObj.href = url;
                    fileObj.type = "text/css";
                    fileObj.rel="stylesheet";
                }else if(ThisType==".less"){
                    fileObj=document.createElement('link');
                    fileObj.href = url;
                    fileObj.type = "text/css";
                    fileObj.rel="stylesheet/less";
                }
                success = success || function(){};
                fileObj.onload = fileObj.onreadystatechange = function() {
                    if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
                        success();
                        classcodes.push(url)
                    }
                }
                document.getElementsByTagName('head')[0].appendChild(fileObj);
            }else{
                success();
            }
        }
        /*獲取文件類型,后綴名,小寫*/
        function GetFileType(url){
            if(url!=null && url.length>0){
                return url.substr(url.lastIndexOf(".")).toLowerCase();
            }
            return "";
        }
        /*文件是否已加載*/
        function FileIsExt(FileArray,_url){
            if(FileArray!=null && FileArray.length>0){
                var len =FileArray.length;
                for (var i = 0; i < len; i++) {
                    if (FileArray[i] ==_url) {
                       return true;
                    }
                }
            }
            return false;
        }
    }
}

var FilesArray=["js/index.js","js/ClassInherit1.js","js/highcharts_2.21.js","css/index.css"];
Import.LoadFileList(FilesArray,function(){
   /*這里寫加載完成后需要執行的代碼或方法*/
});

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM