DynamicLoad.js文件代码如下:
function DynamicLoad()
{
//属性
var Self=this;?????? //对象自身
//功能:加载指定的文件
//参数:src――需要被加载的文件
//返回:(无)
this.Load=function(src)
{
if(Self.IsLoaded(src))???? //判断该文件是否已经加载了
{
??? Self.OnLoaded(src);
??? return;
}
else??????? //如果没有加载,动态创建
{
??? var objDynamic;???? //动态创建的对象
??? var type=Self.GetSrcType(src); //文件类型
??? if(type=="js" || type=="vbs")
??? {
???? objDynamic=document.createElement("script");
???? objDynamic.src=src;
???? if(type=="js")
???? {
????? objDynamic.type="text/javascript";
????? objDynamic.language="javascript";
???? }
???? else
???? {
????? objDynamic.type="text/vbscript";
????? objDynamic.language="vbscript";
???? }
??? }
??? else if(type=="css")
??? {
???? objDynamic=document.createElement("link");
???? objDynamic.rel="stylesheet";
???? objDynamic.type="text/css";
???? objDynamic.href=src;
??? }
??? else
??? {
???? Self.OnFailed(src);
???? return;
??? }
??? document.getElementsByTagName("head")[0].appendChild(objDynamic); //将创建的对象插入到HEAD节中
??? objDynamic.onload=objDynamic.onreadystatechange=function()??? //加载过程中状态改变引发的事件
??? {???
???? //在此函数中this指针指的是s结点对象,而不是JsLoader实例,???
???? //所以必须用self来调用onsuccess事件,下同。
???? if(this.readyState && this.readyState=="loading")
????? return;
???? else
?????? Self.OnLoaded(src);
??? };
??? objDynamic.onerror=function()???????????? //加载过程中发生错误引发的事件
??? {
???? document.getElementsByTagName("head")[0].removeChild(objDynamic);
???? Self.OnFailed(src);
??? };
}
};
//功能:判断是否已经加载了某文件
//参数:src――需要被检查的文件
//返回:返回是否已经加载了该文件
this.IsLoaded=function(src)
{
var isLoaded=false;??? //假设没有加载
var type=Self.GetSrcType(src); //得到文件的类型
var i;?????? //用于循环的索引
if(type=="js" || type=="vbs")
{
??? var scripts=document.getElementsByTagName("script"); //得到所有的脚本对象**
??? for(i=0;i<scripts.length;i++)??????? //依次判断每个script对象
??? {
???? if(scripts[i].src && scripts[i].src.indexOf(src)!=-1)
???? {
????? if(scripts[i].readyState=="loaded" || scripts[i].readyState=="complete")
????? {
?????? isLoaded=true;
?????? break;
????? }
???? }
??? }
}
else if(type=="css")
{
??? var links=document.getElementsByTagName("link"); //得到所有的link对象**
??? for(i=0;i<links.length;i++)???????? //依次判断每个link对象
??? {
???? if(links[i].href && links[i].href.indexOf(src)!=-1)
???? {
????? if(links[i].readyState=="loaded" || links[i].readyState=="complete" || links[i].readyState=="interactive")
????? {
?????? isLoaded=true;
?????? break;
????? }
???? }
??? }
}
return isLoaded;
};
//功能:得到文件的类型(即扩展名)
//参数:src――文件名
//返回:返回文件的类型
this.GetSrcType=function(src)
{
var type="";
var lastIndex=src.lastIndexOf(".");
if(lastIndex!=-1)
{
??? type=src.substr(lastIndex+1);
}
return type;
};
//功能:当文件加载完成时发生的事件
//参数:src――加载完成的文件
//返回:(无)
this.OnLoaded=function(src)
{
Self.LoadedCallback(src);
};
//功能:文件加载完成时执行的回调函数
//参数:src――加载完的文件
//返回:(无)
this.LoadedCallback=function(src){};
//功能:当文件加载过程中发生错误时发生的事件
//参数:src――正在加载的文件
//返回:(无)
this.OnFailed=function(src)
{
Self.FailedCallback(src);
};
//功能:当文件加载失败时执行的回调函数
//参数:src――加载失败的文件
//返回:(无)
this.FailedCallback=function(src){};
}
页面代码:
<html>
<body>
<script language="javascript" type="text/javascript" src="DynamicLoad.js"></script>
<script language="javascript" type="text/javascript">
var dl=new DynamicLoad();
function test1()
{
dl.Load("css.css");?
}
function test2()
{
dl.Load("Admin_style.css");?
}
</script>
<input type="button" class="Button" onclick="test2()" value="submit"/><br/>
<input type="button" class="Button" value="button" onclick="test1()"/><br/>
<a href="">aaa</a>
</body>
</html>
注释:
js文件方法本文件包含了一个名为DynamicLoad的类,该类可以为页面动态加载js、vbs和css文件。
属性: Self――对象自身(该属性为设计时使用,程序中请尽量避免使用该属性。)
方法: Load(src)――加载指定的文件。如果加载成功,引发OnLoaded事件;如果加载失败,引发OnFailed事件。您可以通过重载回调函数LoadedCallback和FailedCallback来执行加载对应的操作。
IsLoaded(src)――判断指定的文件是否已经加载完毕。
GetSrcType(src)――得到文件类型(即扩展名)
LoadedCallback(src)――文件加载成功后执行的回调函数。请重载该方法,以处理加载文件成功之后的操作。
FailedCallback(src)――文件加载失败后执行的回调函数。请重载该方法,以处理加载文件失败之后的操作。
事件: OnLoaded(src)――文件加载成功事件。
OnFailed(src)――文件加载失败事件。
/***************************/
var dl=new DynamicLoad();???? //初始化DynamicLoad对象
alert(dl.IsLoaded("DynamicLoad.js")); //判断是否已经加载了文件DynamicLoad.js
dl.Load("HttpCookie.js");???? //加载HttpCookie.js
alert(dl.IsLoaded("HttpCookie.js")); //判断是否已经加载了文件HttpCookie.js。加载需要时间,一般情况下这里返回false;如果过一小段时间再判断,很可能返回true。
详细解决方案
用javascript动态加载不同css/js资料
热度:411 发布时间:2012-08-21 13:00:22.0
相关解决方案
- javascript ie6兼容的有关问题
- javascript window open在ie中设立不起作用,求解决
- javascript 字符串拼接效率有关问题
- JavaScript 自动生成图片并合并有关问题
- 不走"<script type='text/javascript'>"标签咋回事
- <script type="javascript/text">的有关问题
- 用servlet+jsp+javascript+jdbc做个简单的办公自动化系统流程,该如何解决
- 怎么打开 javascript:SetData(2010,5,10)
- javaScript = == ===区别,该怎么解决
- javascript 怎么验证name=xx.xx的radio表单
- form action 和 javascript 的提交問題解决方法
- javascript,该怎么处理
- javascript,该如何处理
- javascript 选中文字 但是保存样式 标签
- 新人求问,J2EE方向,html,css,javascript,vml要学到什么程度?解决思路
- javascript 请求servlet兑现将函数中定义的变量作为参数
- javascript 不懂,该如何处理
- javascript 不懂解决方法
- JavaScript 大局函数求实例,高分求
- javaScript 里面 如何知道Object 对象的长度
- javascript 函数调用有什么有关问题,请
- javascript 中文本框中数字如何比较
- javascript IE通过,火狐,google浏览器不过解决思路
- javascript rsa加密/java使用Cipher.getInstance("RSA/ECB/PKCS1Padding")解密,该如何处理
- IE javascript start()函数解决方案
- 关于RTMP 播放器(DELPHI C# FLASH JAVASCRIPT)解决思路
- Chrome Javascript Click 事件,该如何解决
- javascript 实出_blank跳转到新标签页有关问题
- 分享上Google Maps Javascript API v3
- javascript 绑定服务器控件 事件,该如何解决