Javascript动态加载脚本与样式

   动态加载js

动态加载js的必要性:

1.    项目越做越大,大量引入的js会导致性能问题;

2.   实际项目可能会遇到:需要在一个js文件中引用另一个js文件中的函数,可是另一个函数有没有办法在页面中通过该<script>标签加载。

网上看了几篇博客大概有三种方式:

1、直接document.write<script language="javascript">    document.write("<script src=‘jiaxiangjun.js‘></script>");</script>
2、动态改变已有script的src属性<script src=‘‘ id="jxj"></script><script language="javascript">    jxj.src="jiaxiangjun.js"</script>

3、动态创建script元素<script>    var headTag = document.getElementsByTagName(‘HEAD‘).item(0);    var myScript= document.createElement("script");    myScript.type = "text/javascript";    myScript.src="jiaxiangjun.js";    headTag.appendChild(myScript);</script> 

基本的原理就是利用dom动态引入js到目的文件中。

还有一种方法是提供了一个公用的插入script标签的方法,接受普通js代码作为参数,可以达到可以动态执行js的效果:

var myscript = document.createElement(‘script‘);

myscript.type = ‘text/javascript‘;

var text =document.createTextNode("alert(‘jxj‘)");    // 设置script标签内容;IE会报错;

myscript.appendChild(text);

document.getElementsByTagName(‘head‘)[0].appendChild(myscript);

// IE浏览器认为script是特殊元素,不能再访问子节点;

// 为了兼容,可以使用text属性来代替;

functionloadScriptString(code){

varscript = document.createElement("script");

script.type = "text/javascript";

try

{

// IE浏览器认为script是特殊元素,不能再访问子节点;报错;

script.appendChild(document.createTextNode(code));// W3C方式;

}

catch(ex)

{

script.text = code;//

}

document.body.appendChild(script);

}

// 调用;

loadScriptString("function sayHi(){alert(‘hi‘)}");

二  动态样式

为了一些项目提出的特殊的界面需要我们很多时候要实现几种皮肤风格的切换,比如我现在做的网管系统,平台两种风格,具体产品还有自己的风格;嘿嘿。为了实现着这些功能我们要实现动态加载样式。

常见的样式有两种方式进行加载,一种是<link>标签,一种是<style>标签;

1.动态引入link文件

var flag =true;

if(flag){

loadStyles(‘basic.css‘);// 调用公共函数,引入css路径;

}

functionloadStyles(url){

varlink = document.createElement(‘link‘);

link.rel = ‘stylesheet‘;

link.type = ‘text/css‘;

link.href = url;

document.getElementsByTagName(‘head‘)[0].appendChild(link);

}

2.动态执行style代码

var flag =true;

if(flag)

{

varstyle = docuemnt.createElement(‘style‘);

style.type = ‘text/css‘;

document.getElementsByTagName(‘head‘)[0].appendChild(style);

insertRule(document.styleSheets[0],‘#box‘,‘background:red‘,0);

}

functioninsertRule(sheet,selectorText,cssText,position)

{

if(sheet.insertRule) // 如果是非IE;

{

sheet.insertRule(selectorText+"{"+cssText+"}",position);

}

elseif(sheet.addRule) // 如果是IE;

{

sheet.addRule(selectorText,cssText,position);

}

// 动态执行style2

functionloadStyleString(css)

{

varstyle = document.createElement("style");

style.type = "text/css";

try

{

// IE会报错;不允许向<style>元素添加子节点;

style.appendChild(document.createTextNode(css));

}

catch(ex)

{

// 此时,访问元素的StyleSheet属性,该属性有有一个cssText属性,可以接受CSS代码;

style.styleSheet.cssText = css;

}

varhead = document.getElementsByTagName("head")[0];

head.appendChild(style);

}

loadStyleString("body {background-color:red}");

参考博客:  http://www.cnblogs.com/yizihan/p/4386431.html?utm_source=tuicool

http://www.cnblogs.com/lkf18/archive/2012/05/24/2515935.html

http://www.iteye.com/topic/147810

http://www.cnblogs.com/feng_013/articles/1807520.html

时间: 2024-08-02 06:59:50

Javascript动态加载脚本与样式的相关文章

第一百一十八节,JavaScript,动态加载脚本和样式

JavaScript,动态加载脚本和样式 一动态脚本 当网站需求变大,脚本的需求也逐步变大.我们就不得不引入太多的JS脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本. 比如:我们想在需要检测浏览器的时候,再引入检测文件. 1动态加载js文件 window.onload = function() { //window.onload事件,等待html执行完成后,执行匿名函数 //判断要加载的文件是否加载成功 alert(typeof BrowserDetect); }

JavaScript的DOM_动态加载脚本和样式

一.动态加载脚本 当网站需求变大,脚本的需求也逐步变大.我们就不得不引入太多的 JS 脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本. 1.动态加载js文件 比如:我们想在需要检测浏览器的时候,再引入检测文件. <script type="text/javascript"> window.onload = function(){ alert(typeof BrowserDetect); } var flag = true; //设置 true

JavaScript学习10:动态加载脚本和样式

我们在写Web页面的时候,需要引入很多的JavaScript脚本文件和CSS样式文件,尤其是在网站需求量很大的时候,脚本的需求量也随之变大,这样一来,网站的性能就会大打折扣,因此就出现了动态加载的概念,即在需要的时候才去加载对应的脚本和样式.下面我们就来看看如何实现动态加载.  动态脚本: 先来看一个动态加载js文件的代码示例: //动态加载JS var flag=false ; if(flag){ loadScript('browserdetect.js'); } function loadS

动态加载脚本和样式

当网站需求变大,脚本的加载就很关键了. 动态加载能减少不必要的脚本加载,提高js执行速度. 首先,动态加载JS脚本文件demo.js.代码如下: window.unload=function(){ var flag=true; if(flag){ var script=ducument.createElement('script'); script.type='text/javascrpt'; script.src='demo.js'; docement.getElementsByTagName

动态加载脚本和样式(转)

一.元素位置 这次补充一个 DOM 的方法:getBoundingClientRect().这个方法返回一个矩形对象,包含四个属性:left.top.right和 bottom.分别表示元素各边与页面上边和左边的距离. var box = document.getElementById('box');//获取元素 alert(box.getBoundingClientRect().top);//元素上边距离页面上边的距离 alert(box.getBoundingClientRect().rig

JavaScript动态加载资源

//动态加载样式 function dynamicLoadingCss(path){ if(!path || path.length === 0){ return false; } var head = document.getElementsByTagName('head')[0]; var link = document.createElement('link'); link.href = path; link.rel = 'stylesheet'; link.type = 'text/cs

异步加载脚本和样式

<script>         window.onload = function () {             loadScriptURL('script/head.js')             loadScriptcode('alert("hahaha");');             loadStyleURL('a.css');             var csscode = '#box{background:red}';             loa

JS 动态加载脚本 执行回调[transfer]

JS 动态加载脚本 执行回调 关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解怎么在js中加载其它js文件并在加载完成后执行回调函数. 我们可以动态的创建 <script> 元素,然后通过更改它的 src 属性来加载脚本,但是怎么知道这个脚本文件加载完成了呢,因为我们有些函数需要在脚本加载完成生效后才能开始执行. 经过对网络上资源的搜索,我发现

JS 动态加载脚本 执行回调

JS 动态加载脚本  执行回调 关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解怎么在js中加载其它js文件并在加载完成后执行回调函数. 我们可以动态的创建 <script> 元素,然后通过更改它的 src 属性来加载脚本,但是怎么知道这个脚本文件加载完成了呢,因为我们有些函数需要在脚本加载完成生效后才能开始执行. 经过对网络上资源的搜索,我发