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 相关文章推荐
Js callBack 返回前一页的js方法
Nov 30 Javascript
javascript常用对话框小集
Sep 13 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
Mar 13 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
Jul 04 Javascript
教你如何在Node.js中使用jQuery
Aug 28 Javascript
js实现简单的计算器功能
Jan 16 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
JavaScript设计模式之单例模式详解
Jun 09 Javascript
浅谈Node异步编程的机制
Oct 18 Javascript
tangram.js库实现js类的方式实例分析
Jan 06 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
常用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解析url的三个示例
2014/01/20 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
深入研究React中setState源码
2017/11/17 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
Python使用django获取用户IP地址的方法
2015/05/11 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
2014年防汛工作总结
2014/12/08 职场文书
战马观后感
2015/06/08 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android