动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。
2008-09-01 11:21
1136 查看
JS代码如下:
var DynamicLoadScriptQueue =
{
Loading : false,
TaskQueue : [],
CallBack : function (StartTime, CallBackMethod)
{
CallBackMethod && CallBackMethod(new Date().valueOf() - StartTime.valueOf());
this.Loading = false;
this.Load();
},
Load : function ()
{
if (!this.Loading && this.TaskQueue.length)
{
var Head = document.getElementsByTagName("head")[0];
if (!Head)
{
this.TaskQueue.length = 0;
this.TaskQueue = null;
throw new Error('The head does not exist in this page.');
}
var DLSQ = this, TaskQueue = this.TaskQueue.shift(), StartTime = new Date, Script = document.createElement('script');
this.Loading = true;
Script.onload = Script.onreadystatechange = function ()
{
if (Script && Script.readyState && Script.readyState != 'loaded' && Script.readyState != 'complete') return;
Script.onload = Script.onreadystatechange = Script.onerror = null;
Script.Src = '';
Script.parentNode.removeChild(Script);
Script = null;
DLSQ.CallBack(StartTime, TaskQueue.CallBackMethod);
StartTime = TaskQueue = null;
};
Script.charset = TaskQueue.Charset || 'gb2312';
Script.src = TaskQueue.Src;
Head.appendChild(Script);
}
},
AddTask : function (Src, Charset, CallBackMethod)
{
this.TaskQueue.push({ 'Src' : Src, 'Charset' : Charset, 'CallBackMethod' : CallBackMethod });
this.Load();
}
}
调用示例:
1、将上述代码保存为JScript1.js,编码格式选择UTF-8。
2、将以下两段代码分别报存为JScript2.js和JScript3.js,编码格式分别为UTF-8和GB2312。
var strTest = "abcdefg";
var strTemp = "abcdefg";
3、新建测试页面WebForm1.aspx,代码如下:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>动态加载JS文件测试页面</title>
<script type="text/javascript" src ="JScript1.js"></script>
<script type="text/javascript">
var Test1 = function(LoadTime)
{
alert("加载耗时:" + LoadTime + "毫秒,测试字符串:" + strTest);
}
var Test2 = function(LoadTime)
{
alert("加载耗时:" + LoadTime + "毫秒,测试字符串:" + strTemp);
}
DynamicLoadScriptQueue.AddTask("JScript2.js","UTF-8",Test1);
DynamicLoadScriptQueue.AddTask("JScript3.js","GB2312",Test2);
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
4、将所有文件放到同一目录,运行WebForm1.aspx即可。
var DynamicLoadScriptQueue =
{
Loading : false,
TaskQueue : [],
CallBack : function (StartTime, CallBackMethod)
{
CallBackMethod && CallBackMethod(new Date().valueOf() - StartTime.valueOf());
this.Loading = false;
this.Load();
},
Load : function ()
{
if (!this.Loading && this.TaskQueue.length)
{
var Head = document.getElementsByTagName("head")[0];
if (!Head)
{
this.TaskQueue.length = 0;
this.TaskQueue = null;
throw new Error('The head does not exist in this page.');
}
var DLSQ = this, TaskQueue = this.TaskQueue.shift(), StartTime = new Date, Script = document.createElement('script');
this.Loading = true;
Script.onload = Script.onreadystatechange = function ()
{
if (Script && Script.readyState && Script.readyState != 'loaded' && Script.readyState != 'complete') return;
Script.onload = Script.onreadystatechange = Script.onerror = null;
Script.Src = '';
Script.parentNode.removeChild(Script);
Script = null;
DLSQ.CallBack(StartTime, TaskQueue.CallBackMethod);
StartTime = TaskQueue = null;
};
Script.charset = TaskQueue.Charset || 'gb2312';
Script.src = TaskQueue.Src;
Head.appendChild(Script);
}
},
AddTask : function (Src, Charset, CallBackMethod)
{
this.TaskQueue.push({ 'Src' : Src, 'Charset' : Charset, 'CallBackMethod' : CallBackMethod });
this.Load();
}
}
调用示例:
1、将上述代码保存为JScript1.js,编码格式选择UTF-8。
2、将以下两段代码分别报存为JScript2.js和JScript3.js,编码格式分别为UTF-8和GB2312。
var strTest = "abcdefg";
var strTemp = "abcdefg";
3、新建测试页面WebForm1.aspx,代码如下:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>动态加载JS文件测试页面</title>
<script type="text/javascript" src ="JScript1.js"></script>
<script type="text/javascript">
var Test1 = function(LoadTime)
{
alert("加载耗时:" + LoadTime + "毫秒,测试字符串:" + strTest);
}
var Test2 = function(LoadTime)
{
alert("加载耗时:" + LoadTime + "毫秒,测试字符串:" + strTemp);
}
DynamicLoadScriptQueue.AddTask("JScript2.js","UTF-8",Test1);
DynamicLoadScriptQueue.AddTask("JScript3.js","GB2312",Test2);
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
4、将所有文件放到同一目录,运行WebForm1.aspx即可。
相关文章推荐
- 动态加载外部.js文件时候,javascript的执行顺序问题
- 动态引入的外部 JS 文件在各浏览器中的加载顺序不一致问题解决
- 补充《动态加载外部.js文件时候,javascript的执行顺序问题》
- 完美解决JS文件页面加载时的阻塞问题
- 动态加载js文件默认为异步请求的问题解决
- 多层动态加载js文件出现的问题终极解决【深海原创】
- JavaScript 的性能优化:加载和执行(以及动态引入的外部 JS 文件在各浏览器中的加载顺序不一致)
- ajax动态加载js,导致js不执行失效问题吻
- html、css、js文件加载顺序及执行情况
- 帮助解决网页和JS文件中的中文编码问题的小工具
- html、css、js文件加载顺序及执行情况
- Linux静态链接(库)、动态链接(库)、可执行文件加载相关问题(创建、选项、环境变量等)
- 原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
- 解决springmvc加载JS,CSS等文件问题【转】
- Cocos2d-js jsb native 运行嵌套proto文件读取失败问题解决方案
- 【转】html、css、js文件加载顺序及执行情况
- 动态加载JS文件并执行
- html、css、js文件加载顺序及执行情况
- 解决用jquery load加载页面到div时,不执行页面js的问题
- 解决VC中动态加载DLL时,必须将DLL文件放在EXE文件路经和系统目录下的问题