动态加载jscss 代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态加载jscss 代码相关的知识,希望对你有一定的参考价值。

一、原生js:

 1 /**
 2          * 加载js和css文件
 3          * @param         jsonData.path                前缀路径
 4          * @param         jsonData.url                需要加载的js路径或css路径
 5          * @param         jsonData.type                需要加载的类型 js或css
 6         */
 7          function loadWriteFiles(jsonData)
 8          {
 9              jsonData.path = jsonData.path != undefined ? jsonData.path : "";
10              if(jsonData.type == "js")
11              {
12                 document.writeln("<script type=‘text/javascript‘ src=‘"+ jsonData.path + jsonData.url+"‘></script>");
13              }
14              else if(jsonData.type == "css")
15              {
16                 document.writeln("<link rel=‘stylesheet‘ href=‘"+jsonData.path + jsonData.url+"‘ type=‘text/css‘ />");
17              }
18          }
19          
20          /**
21           * 加载js或css到head中
22           * @param         jsonData.path                前缀路径
23           * @param         jsonData.url                需要加载的js路径或css路径
24           * @param         jsonData.type                需要加载的类型 js或css
25           */
26          function loadFilesToHead(jsonData)
27          {
28              jsonData.path = jsonData.path != undefined ? jsonData.path : "";
29              if(jsonData.type == "js")
30              {
31                  var _js = document.createElement("script");
32                  _js.setAttribute("type", "text/javascript");
33                  _js.setAttribute("src", jsonData.path + jsonData.url);
34                  _js.onload = _js.onreadystatechange=function(){  
35                      if(!this.readyState||this.readyState==‘loaded‘||this.readyState==‘complete‘){  
36                          if("function" == typeof(jsonData["callback"]) && jsonData["callback"]){
37                                 jsonData["callback"].call(this);
38                          }
39                      }  
40                      _js.onload=_js.onreadystatechange=null;  
41                  }  
42                  document.getElementsByTagName("head")[0].appendChild(_js);//追加到head标签内
43              }
44              else if(jsonData.type == "css")
45              {
46                  var _css = document.createElement("link");
47                  _js.setAttribute("type", "text/css");
48                  _css.setAttribute("rel", "stylesheet");
49                  _css.setAttribute("href", jsonData.path + jsonData.url);
50                  document.getElementsByTagName("head")[0].appendChild(_css);//追加到head标签内
51              }
52          }

 

 

二、jquery版本:

    采用deferred对象返回结果

 

 1 var uiLoad = uiLoad || {};
 2 
 3 (function($, $document, uiLoad) {
 4     "use strict";
 5 
 6     var loaded = [],
 7     promise = false,
 8     deferred = $.Deferred();
 9 
10     uiLoad.load = function (srcs) {
11         srcs = $.isArray(srcs) ? srcs : srcs.split(/\s+/);
12         if(!promise){
13             promise = deferred.promise();
14         }
15 
16       $.each(srcs, function(index, src) {
17         promise = promise.then( function(){
18             return src.indexOf(‘.css‘) >=0 ? loadCSS(src) : loadScript(src);
19         } );
20       });
21       deferred.resolve();
22       return promise;
23     };
24 
25     var loadScript = function (src) {
26         if(loaded[src]) return loaded[src].promise();
27 
28         var deferred = $.Deferred();
29         var script = $document.createElement(‘script‘);
30         script.src = src;
31         script.onload = function (e) {
32             deferred.resolve(e);
33         };
34         script.onerror = function (e) {
35             deferred.reject(e);
36         };
37         $document.body.appendChild(script);
38         loaded[src] = deferred;
39 
40         return deferred.promise();
41     };
42 
43     var loadCSS = function (href) {
44         if(loaded[href]) return loaded[href].promise();
45 
46         var deferred = $.Deferred();
47         var style = $document.createElement(‘link‘);
48         style.rel = ‘stylesheet‘;
49         style.type = ‘text/css‘;
50         style.href = href;
51         style.onload = function (e) {
52             deferred.resolve(e);
53         };
54         style.onerror = function (e) {
55             deferred.reject(e);
56         };
57         $document.head.appendChild(style);
58         loaded[href] = deferred;
59 
60         return deferred.promise();
61     }
62 
63 })(jQuery, document, uiLoad);

 

以上是关于动态加载jscss 代码的主要内容,如果未能解决你的问题,请参考以下文章

原生JS动态加载JSCSS文件及代码脚本

原生JS动态加载JSCSS文件及代码脚本

动态添加div及对应的jscss文件

JS动态引入jsCSS动态创建script/link/style标签

在android中动态创建选项卡并使用传入的参数加载片段

异步加载JSCSS