zoukankan      html  css  js  c++  java
  • 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(){
       /*这里写加载完成后需要执行的代码或方法*/
    });

  • 相关阅读:
    Objects类源码详解(基于jdk1.8.0_261)
    Object类源码详解(基于jdk1.8.0_261)
    Collections工具类源码详解(基于jdk1.8.0_261)
    版本控制神器——git的基本使用
    数据结构练习1~插入排序~
    求指错啊急是求幂的
    编完了个代码大家给看看还能不能精简
    关于KMP算法
    有网友建议写一个新手指南或者FAQ一类的置顶你们认为呢
    c语言新手编程错误求解
  • 原文地址:https://www.cnblogs.com/luowanli/p/2599277.html
Copyright © 2011-2022 走看看