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 相关文章推荐
JavaScript Array Flatten 与递归使用介绍
Oct 30 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
javascript中Number对象的toString()方法分析
Dec 20 Javascript
jquery果冻抖动效果实现方法
Jan 15 Javascript
JS获得图片alt信息的方法
Apr 01 Javascript
简单理解vue中Props属性
Oct 27 Javascript
JavaScript字符串对象(string)基本用法示例
Jan 18 Javascript
js 数字、字符串、布尔值的转换方法(必看)
Apr 07 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
Dec 18 Javascript
layui表格checkbox选择全选样式及功能的实例
Mar 07 Javascript
微信小程序 button样式设置为图片的方法
Jun 19 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
Smarty保留变量用法分析
2016/05/23 PHP
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
python实现从web抓取文档的方法
2014/09/26 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python缓存技术实现过程详解
2019/09/25 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
在校学生职业规划范文
2014/01/08 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
2014年稽查工作总结
2014/12/20 职场文书
西安事变观后感
2015/06/12 职场文书
中学校园广播稿
2015/08/18 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
python中pycryto实现数据加密
2022/04/29 Python