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从头学起第二讲
Jul 04 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
Feb 02 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
如何用JavaScript定义一个类
Sep 12 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
jquery实现文本框textarea自适应高度
Mar 09 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
vue.js+boostrap项目实践(案例详解)
Sep 21 Javascript
使用JSON作为函数的参数的优缺点
Oct 27 Javascript
JS实现元素上下左右移动效果
Oct 18 Javascript
详解如何用babel转换es6的class语法
Apr 03 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
Apr 01 jQuery
常用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
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python ljust rjust center输出
2008/09/06 Python
Python正则表达式匹配ip地址实例
2014/10/09 Python
django实现前后台交互实例
2017/08/07 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
幼儿园门卫岗位职责
2014/02/14 职场文书
企业务虚会发言材料
2014/10/20 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
优化Mysql查询的示例
2022/04/26 MySQL