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 相关文章推荐
用C/C++来实现 Node.js 的模块(一)
Sep 24 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
JQuery基础语法小结
Feb 27 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 Javascript
详谈js中数组(array)和对象(object)的区别
Feb 27 Javascript
超简单的微信小程序轮播图
Nov 22 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
Feb 12 Javascript
vue+ESLint 配置保存 自动格式化代码
Mar 17 Javascript
vue 实现用户登录方式的切换功能
Apr 14 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 Javascript
Element实现动态表格的示例代码
Aug 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
学习使用curl采集curl使用方法
2012/01/11 PHP
php数组中删除元素的实现代码
2012/06/22 PHP
php 伪静态之IIS篇
2014/06/02 PHP
php简单的上传类分享
2016/05/15 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
js自动生成对象的属性示例代码
2013/10/28 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python numpy 常用函数总结
2017/12/07 Python
Python批量发送post请求的实现代码
2018/05/05 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python如何读取文件中图片格式
2020/01/13 Python
医生实习工作总结的自我评价
2013/09/27 职场文书
政风行风整改报告
2014/11/06 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
趣味运动会开幕词
2015/01/28 职场文书
驳回起诉裁定书
2015/05/19 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
学生检讨书范文
2019/06/24 职场文书
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python
Python实现双向链表基本操作
2022/05/25 Python
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android