动态加载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 相关文章推荐
javascript英文日期(有时间)选择器
May 02 Javascript
JavaScript 动态创建VML的方法
Oct 14 Javascript
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
Jun 24 Javascript
AngularJS实现路由实例
Feb 12 Javascript
详解tween.js的使用教程
Sep 14 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
Vue Router的懒加载路径的解决方法
Jun 21 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
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
咖啡与牛奶
2021/03/03 冲泡冲煮
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP网站基础优化方法小结
2008/09/29 PHP
关于php循环跳出的问题
2013/07/01 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
用python实现的线程池实例代码
2018/01/06 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
python 实现线程之间的通信示例
2020/02/14 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
Python常用类型转换实现代码实例
2020/07/28 Python
如何一键升级Python所有包
2020/11/05 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
shell的种类有哪些
2015/04/15 面试题
电焊工工作岗位职责
2014/02/06 职场文书
团日活动总结范文
2014/04/25 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
经营场所证明范本
2015/06/19 职场文书