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 相关文章推荐
Prototype Hash对象 学习
Jul 19 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
一个封装js代码-----展开收起效果示例
Jul 03 Javascript
jQuery+PHP打造滑动开关效果
Dec 16 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
May 12 Javascript
javascript事件冒泡简单示例
Jun 20 Javascript
js倒计时简单实现代码
Aug 11 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
extjs图表绘制之条形图实现方法分析
Mar 06 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的库,结果发现很多东西
2006/12/31 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
2013/08/29 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
angular组件间传值测试的方法详解
2020/05/07 Javascript
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python os模块介绍
2014/11/30 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python监控进程脚本
2018/04/12 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
大学生励志演讲稿
2014/04/25 职场文书
社区文化建设方案
2014/05/02 职场文书
校园环保标语
2014/06/13 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
教师考核评语大全
2014/12/31 职场文书
幼师求职自荐信
2015/03/26 职场文书