动态加载js的方法汇总


Posted in Javascript onFebruary 13, 2015

本文实例汇总了动态加载js的方法。分享给大家供大家参考。具体如下:

方法一:直接document.write(异步)

<script language="javascript">   

    document.write("<script src='res/extwidget/echarts/xx.js'><\/script>");

</script>

由于这种方式是异步加载,document.write会重写界面,明显不实用
方法二:动态改变已有script的src属性(异步)

<script src='' id="xx"></script>   

<script language="javascript">   

    xx.src="test.js"   

</script>

此种方法不会改变界面元素,不重写界面元素,但同样是异步加载
方法三:动态创建script元素(异步)

<script>

    var body= document.getElementsByTagName('BODY').[0];   

    var script= document.createElement("script");   

    script.type = "text/javascript";   

    script.src="xx.js";   

    body.appendChild( oScript);   

</script>

此办法的优势相对于第二种而言就是不需要最开始就在界面写一个script标签,缺点还是异步加载

方法四:XMLHttpRequest/ActiveXObject加载(异步)

/** 

* 异步加载js脚本 

* @param id   需要设置的<script>标签的id 

* @param url   js文件的相对路径或绝对路径 

*/  

loadJs:function(id,url){  

        

var  xmlHttp = null;  

if(window.ActiveXObject){//IE  

  try {  

      //IE6以及以后版本中可以使用  

      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");  

  } catch (e) {  

      //IE5.5以及以后版本可以使用  

      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  

  }  

}else if(window.XMLHttpRequest){  

  //Firefox,Opera 8.0+,Safari,Chrome  

  xmlHttp = new XMLHttpRequest();  

}  

//采用同步加载  

xmlHttp.open("GET",url,false);  

//发送同步请求,

//如果浏览器为Chrome或Opera,必须发布后才能运行,不然会报错  

xmlHttp.send(null);  

xmlHttp.onreadystatechange = function(){  

  //4代表数据发送完毕  

  if( xmlHttp.readyState == 4 ){  

      //0为访问的本地,200到300代表访问服务器成功,

      //304代表没做修改访问的是缓存  

      if((xmlHttp.status >= 200 && xmlHttp.status <300) || xmlHttp.status == 0 || xmlHttp.status == 304){  

   var myBody = document.getElementsByTagName("BODY")[0];  

   var myScript = document.createElement( "script" );  

   myScript.language = "javascript";  

   myScript.type = "text/javascript";  

   myScript.id = id;  

   try{  

       //IE8以及以下不支持这种方式,需要通过text属性来设置  

       myScript.appendChild(document.createTextNode(xmlHttp.responseText));  

   }catch (ex){  

       myScript.text = xmlHttp.responseText;  

   }  

   myBody.appendChild(myScript);  

      }  

  }  

}  

//采用异步加载  

xmlHttp.open("GET",url,true);  

xmlHttp.send(null);  

}

open里面设置为false就是同步加载了,同步加载不需要设置onreadystatechange事件

这四种方法都是异步执行的,也就是说,在加载这些脚本的同时,主页面的脚本继续运行。

方法五:XMLHttpRequest/ActiveXObject加载(同步)

/** 

* 同步加载js脚本 

* @param id   需要设置的<script>标签的id 

* @param url   js文件的相对路径或绝对路径 

* @return {Boolean}   返回是否加载成功,true代表成功,false代表失败 

*/  

loadJs:function(id,url){  

    

  var  xmlHttp = null;  

  if(window.ActiveXObject){//IE  

      try {  

   //IE6以及以后版本中可以使用  

   xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");  

      } catch (e) {  

   //IE5.5以及以后版本可以使用  

   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  

      }  

  }else if(window.XMLHttpRequest){  

      //Firefox,Opera 8.0+,Safari,Chrome  

      xmlHttp = new XMLHttpRequest();  

  }  

  //采用同步加载  

  xmlHttp.open("GET",url,false);  

  //发送同步请求,如果浏览器为Chrome或Opera,必须发布后才能运行,不然会报错  

  xmlHttp.send(null);  

  //4代表数据发送完毕  

  if( xmlHttp.readyState == 4 ){  

      //0为访问的本地,200到300代表访问服务器成功,304代表没做修改访问的是缓存  

      if((xmlHttp.status >= 200 && xmlHttp.status <300) || xmlHttp.status == 0 || xmlHttp.status == 304){  

   var myBody = document.getElementsByTagName("BODY")[0];  

   var myScript = document.createElement( "script" );  

   myScript.language = "javascript";  

   myScript.type = "text/javascript";  

   myScript.id = id;  

   try{  

       //IE8以及以下不支持这种方式,需要通过text属性来设置  

       myScript.appendChild(document.createTextNode(xmlHttp.responseText));  

   }catch (ex){  

       myScript.text = xmlHttp.responseText;  

   }  

   myBody.appendChild(myScript);  

   return true;  

      }else{  

   return false;  

      }  

  }else{  

      return false;  

  }  

}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
document.all与WEB标准
May 13 Javascript
js escape,unescape解决中文乱码问题的方法
May 26 Javascript
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
js 动态加载事件的几种方法总结
Dec 25 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
过期软件破解办法实例详解
Jan 04 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
Jan 19 Javascript
angular.js实现购物车功能
Oct 23 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 Javascript
JS中min函数实例讲解
Feb 18 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
jQuery EasyUI datagrid实现本地分页的方法
Feb 13 #Javascript
jQuery向后台传入json格式数据的方法
Feb 13 #Javascript
浅谈轻量级js模板引擎simplite
Feb 13 #Javascript
js实现拖拽效果
Feb 12 #Javascript
jQuery多个input求和的实现方法
Feb 12 #Javascript
JQuery实现防止退格键返回的方法
Feb 12 #Javascript
JavaScript自定义数组排序方法
Feb 12 #Javascript
You might like
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
RequireJs的使用详解
2017/02/19 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python语言描述随机梯度下降法
2018/01/04 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Python操作qml对象过程详解
2019/09/26 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
小学生竞选班长演讲稿
2014/04/24 职场文书
任命通知范文
2015/04/21 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
nginx优化的六点方法
2021/03/31 Servers
pytorch 实现变分自动编码器的操作
2021/05/24 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS