动态加载JS文件,完美解决跨域、编码、嵌套、队列、兼容性、执行顺序等相关问题。

本文介绍了一个名为DynamicLoadScriptQueue的JS对象,用于动态加载JavaScript文件,解决了跨域、编码问题、嵌套加载、任务队列管理以及执行顺序和兼容性。通过创建script元素并监听其onload和onreadystatechange事件来确保文件正确加载,并在加载完成后执行回调函数。提供了一个详细的调用示例,包括不同编码格式和回调方法的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS代码如下:

  1. var DynamicLoadScriptQueue  =
  2. {
  3.     Loading : false
  4.     TaskQueue : [], 
  5.     CallBack : function (StartTime, CallBackMethod) 
  6.     {
  7.         CallBackMethod && CallBackMethod(new Date().valueOf() - StartTime.valueOf()); 
  8.         this.Loading = false;
  9.         this.Load(); 
  10.     },
  11.     Load : function () 
  12.     {
  13.         if (!this.Loading && this.TaskQueue.length) 
  14.         {
  15.             var Head = document.getElementsByTagName("head")[0];
  16.             if (!Head) 
  17.             {
  18.                 this.TaskQueue.length = 0;
  19.                 this.TaskQueue = null;
  20.                 throw new Error('The head does not exist in this page.');
  21.             }
  22.             var DLSQ = this, TaskQueue = this.TaskQueue.shift(), StartTime = new Date, Script = document.createElement('script');
  23.             this.Loading = true;
  24.             Script.onload = Script.onreadystatechange = function () 
  25.             {
  26.                 if (Script && Script.readyState && Script.readyState != 'loaded' && Script.readyState != 'complete'return;
  27.                 Script.onload = Script.onreadystatechange = Script.onerror = null;
  28.                 Script.Src = '';
  29.                 Script.parentNode.removeChild(Script);
  30.                 Script = null
  31.                 DLSQ.CallBack(StartTime, TaskQueue.CallBackMethod);
  32.                 StartTime = TaskQueue = null;
  33.             };
  34.             Script.charset = TaskQueue.Charset || 'gb2312';
  35.             Script.src = TaskQueue.Src;
  36.             Head.appendChild(Script);
  37.         }
  38.     }, 
  39.     AddTask : function (Src, Charset, CallBackMethod) 
  40.     {
  41.         this.TaskQueue.push({ 'Src' : Src, 'Charset' : Charset, 'CallBackMethod' : CallBackMethod });
  42.         this.Load();
  43.     }
  44. }

 

调用示例:

1、将上述代码保存为JScript1.js,编码格式选择UTF-8。

2、将以下两段代码分别报存为JScript2.js和JScript3.js,编码格式分别为UTF-8和GB2312。

  1. var strTest = "abcdefg";
  1. var strTemp = "abcdefg";

3、新建测试页面WebForm1.aspx,代码如下:

  1. <html xmlns="http://www.w3.org/1999/xhtml" >
  2. <head runat="server">
  3.     <title>动态加载JS文件测试页面</title>
  4.     <script type="text/javascript" src ="JScript1.js"></script>
  5.     
  6.     <script type="text/javascript">
  7.     var Test1 = function(LoadTime)
  8.     {
  9.         alert("加载耗时:" + LoadTime + "毫秒,测试字符串:" + strTest);
  10.     }
  11.     var Test2 = function(LoadTime)
  12.     {
  13.         alert("加载耗时:" + LoadTime + "毫秒,测试字符串:" + strTemp);
  14.     }
  15.     DynamicLoadScriptQueue.AddTask("JScript2.js","UTF-8",Test1);
  16.     DynamicLoadScriptQueue.AddTask("JScript3.js","GB2312",Test2);
  17.     </script>
  18. </head>
  19. <body>
  20.     <form id="form1" runat="server">
  21.     <div>
  22.     
  23.     </div>
  24.     </form>
  25. </body>
  26. </html>

4、将所有文件放到同一目录,运行WebForm1.aspx即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值