JS 动态加载js文件和css文件 同步/异步的两种简单方式


Posted in Javascript onSeptember 23, 2016
/*动态添加js或css,URL:文件路径,FileType:文件类型(js/css)*/
function AddJsFiles(URL,FileType){
  var oHead = document.getElementsByTagName('HEAD').item(0);
  var addheadfile;
  if(FileType=="js"){
    addheadfile= document.createElement("script");
    addheadfile.type = "text/javascript";
    addheadfile.src=URL;
  }else{
    addheadfile= document.createElement("link");
    addheadfile.type = "text/css";
    addheadfile.rel="stylesheet";
    addheadfile.rev = "stylesheet";
    addheadfile.media = "screen";
    addheadfile.href=URL;
  }
  oHead.appendChild( addheadfile);
}
/*方法调用*/
AddJsFiles("js/index.js","js");
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(){
  /*这里写加载完成后需要执行的代码或方法*/
});

以上就是小编为大家带来的JS 动态加载js文件和css文件 同步/异步的两种简单方式的全部内容了,希望对大家有所帮助,多多支持三水点靠木~

Javascript 相关文章推荐
JS BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
[Web]防止用户复制页面内容和另存页面的方法
Feb 06 Javascript
Firefox window.close()的使用注意事项
Apr 11 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
Dec 21 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
JS中数组Array的用法示例介绍
Feb 20 Javascript
基于JS实现类似支付宝支付密码输入框
Sep 02 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
如何制作自己的原生JavaScript路由
May 05 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
Sep 23 #Javascript
form表单转Json提交的方法(推荐)
Sep 23 #Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 #Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
Sep 23 #Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 #Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 #Javascript
值得分享的bootstrap table实例
Sep 22 #Javascript
You might like
在普通HTTP上安全地传输密码
2007/07/21 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
js获取内联样式的方法
2015/01/27 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
用js编写留言板
2020/03/17 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
python获取array中指定元素的示例
2019/11/26 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
高中生学期学习自我评价
2014/02/24 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
辩护词格式
2015/05/22 职场文书
Python中的嵌套循环详情
2022/03/23 Python