动态加载js、css的简单实现代码


Posted in Javascript onMay 26, 2016

一、原生js:

/**
     * 加载js和css文件
     * @param     jsonData.path        前缀路径
     * @param     jsonData.url        需要加载的js路径或css路径
     * @param     jsonData.type        需要加载的类型 js或css
    */
     function loadWriteFiles(jsonData)
     {
       jsonData.path = jsonData.path != undefined ? jsonData.path : "";
       if(jsonData.type == "js")
       {
        document.writeln("<script type='text/javascript' src='"+ jsonData.path + jsonData.url+"'></script>");
       }
       else if(jsonData.type == "css")
       {
        document.writeln("<link rel='stylesheet' href='"+jsonData.path + jsonData.url+"' type='text/css' />");
       }
     }
     
     /**
     * 加载js或css到head中
     * @param     jsonData.path        前缀路径
     * @param     jsonData.url        需要加载的js路径或css路径
     * @param     jsonData.type        需要加载的类型 js或css
     */
     function loadFilesToHead(jsonData)
     {
       jsonData.path = jsonData.path != undefined ? jsonData.path : "";
       if(jsonData.type == "js")
       {
         var _js = document.createElement("script");
         _js.setAttribute("type", "text/javascript");
         _js.setAttribute("src", jsonData.path + jsonData.url);
         _js.onload = _js.onreadystatechange=function(){ 
           if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){ 
             if("function" == typeof(jsonData["callback"]) && jsonData["callback"]){
                jsonData["callback"].call(this);
             }
           } 
           _js.onload=_js.onreadystatechange=null; 
         } 
         document.getElementsByTagName("head")[0].appendChild(_js);//追加到head标签内
       }
       else if(jsonData.type == "css")
       {
         var _css = document.createElement("link");
         _js.setAttribute("type", "text/css");
         _css.setAttribute("rel", "stylesheet");
         _css.setAttribute("href", jsonData.path + jsonData.url);
         document.getElementsByTagName("head")[0].appendChild(_css);//追加到head标签内
       }
     }

二、jquery版本:

采用deferred对象返回结果

var uiLoad = uiLoad || {};

(function($, $document, uiLoad) {
  "use strict";

  var loaded = [],
  promise = false,
  deferred = $.Deferred();

  uiLoad.load = function (srcs) {
    srcs = $.isArray(srcs) ? srcs : srcs.split(/\s+/);
    if(!promise){
      promise = deferred.promise();
    }

   $.each(srcs, function(index, src) {
    promise = promise.then( function(){
      return src.indexOf('.css') >=0 ? loadCSS(src) : loadScript(src);
    } );
   });
   deferred.resolve();
   return promise;
  };

  var loadScript = function (src) {
    if(loaded[src]) return loaded[src].promise();

    var deferred = $.Deferred();
    var script = $document.createElement('script');
    script.src = src;
    script.onload = function (e) {
      deferred.resolve(e);
    };
    script.onerror = function (e) {
      deferred.reject(e);
    };
    $document.body.appendChild(script);
    loaded[src] = deferred;

    return deferred.promise();
  };

  var loadCSS = function (href) {
    if(loaded[href]) return loaded[href].promise();

    var deferred = $.Deferred();
    var style = $document.createElement('link');
    style.rel = 'stylesheet';
    style.type = 'text/css';
    style.href = href;
    style.onload = function (e) {
      deferred.resolve(e);
    };
    style.onerror = function (e) {
      deferred.reject(e);
    };
    $document.head.appendChild(style);
    loaded[href] = deferred;

    return deferred.promise();
  }

})(jQuery, document, uiLoad);

以上这篇动态加载js、css的简单实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
动态为事件添加js代码示例
Feb 15 Javascript
JQuery开发的数独游戏代码
Oct 29 Javascript
通过JS获取用户本地图片路径并显示的代码
Feb 16 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
javascript数组去重的方法汇总
Apr 14 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
AngularJS指令中的绑定策略实例分析
Dec 14 Javascript
jQuery实现按比例缩放图片的方法
Apr 29 jQuery
JS验证码实现代码
Sep 14 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 Javascript
JS实现简单打字测试
Jun 24 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 Javascript
JS hashMap实例详解
May 26 #Javascript
jQuery验证插件validate使用方法详解
Sep 13 #Javascript
动态加载js、css的实例代码
May 26 #Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 #Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 #Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 #Javascript
jquery分隔Url的param方法(推荐)
May 25 #Javascript
You might like
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
如何使用PHP往windows中添加用户
2006/12/06 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
pygame播放音乐的方法
2015/05/19 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python实现数据库跨服务器迁移
2018/04/12 Python
python实现飞机大战微信小游戏
2020/03/21 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
python实现AdaBoost算法的示例
2020/10/03 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
python中remove函数的踩坑记录
2021/01/04 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
广告学专业应届生求职信
2013/10/01 职场文书
公益广告标语
2014/06/19 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
家属慰问信
2015/02/14 职场文书
给朋友的道歉短信
2015/05/12 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
清明节主题班会
2015/08/14 职场文书
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技