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之通用简单的table选项卡实现(二)
May 09 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
Feb 13 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
node.js中的fs.utimesSync方法使用说明
Dec 15 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
深入理解jQuery中的事件冒泡
May 24 Javascript
解决微信小程序防止无法回到主页的问题
Sep 28 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 Javascript
Electron vue的使用教程图文详解
Jul 05 Javascript
vue中动态select的使用方法示例
Oct 28 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
PHP 事务处理数据实现代码
2010/05/13 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
python打开网页和暂停实例
2014/09/30 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
python实现祝福弹窗效果
2019/04/07 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
项目开发计划书
2014/01/09 职场文书
高中英语教学反思
2014/02/04 职场文书
工会趣味活动方案
2014/08/18 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书