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 相关文章推荐
jQuery EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
JQuery处理json与ajax返回JSON实例代码
Jan 03 Javascript
js面向对象之静态方法和静态属性实例分析
Jan 10 Javascript
jQuery结合ajax实现动态加载文本内容
May 19 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
angularjs ocLazyLoad分步加载js文件实例
Jan 17 Javascript
hammer.js实现图片手势放大效果
Aug 29 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 Javascript
Vue前端判断数据对象是否为空的实例
Sep 02 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
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP中操作ini配置文件的方法
2013/04/25 PHP
深入解析php中的foreach问题
2013/06/30 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
浅谈django orm 优化
2018/08/18 Python
python 接收处理外带的参数方法
2018/12/03 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
Django 自动生成api接口文档教程
2019/11/19 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
应届行政管理专业个人自我评价
2013/12/28 职场文书
个人求职自荐信范文
2015/03/06 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
Python字符串格式化方式
2022/04/07 Python