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 !!的作用
Dec 04 Javascript
比较全面的event对像在IE与FF中的区别 推荐
Sep 21 Javascript
ExtJS 工具栏 分页事件参数
Mar 05 Javascript
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
javascript中的注释使用与注意事项小结
Sep 20 Javascript
jquery 实现上下滚动效果示例代码
Aug 09 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
js 动态生成json对象、时时更新json对象的方法
Dec 02 Javascript
Webpack中loader打包各种文件的方法实例
Sep 03 Javascript
layui点击按钮页面会自动刷新的解决方案
Oct 25 Javascript
vue页面切换项目实现转场动画的方法
Nov 12 Javascript
使用jquery实现轮播图效果
Jan 02 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
我的论坛源代码(九)
2006/10/09 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
PHP 数组基础知识小结
2010/08/20 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
Python列表推导式的使用方法
2013/11/21 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Python unittest模块用法实例分析
2018/05/25 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
python 写一个水果忍者游戏
2021/01/13 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
软件测试题目
2013/02/27 面试题
本科生详细的自我评价
2013/09/19 职场文书
土建施工员岗位职责
2015/04/11 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js
mysql sock文件存储了什么信息
2022/07/15 MySQL