动态加载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.cookie的使用javascript
Apr 11 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
30个最好的jQuery 灯箱插件分享
Apr 25 Javascript
常用的JavaScript模板引擎介绍
Feb 28 Javascript
javascript实现动态标签云
Oct 16 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
Jan 04 Javascript
jQuery插件ajaxFileUpload使用实例解析
Oct 19 Javascript
leaflet的开发入门教程
Nov 17 Javascript
String字符串截取的四种方式总结
Nov 28 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
vue中过滤器filter的讲解
Jan 21 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
一个更简单的无限级分类菜单代码
2007/01/16 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
php框架知识点的整理和补充
2021/03/01 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
javascript中this的四种用法
2015/05/11 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
vue组件与复用详解
2018/04/08 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
Python numpy数组转置与轴变换
2019/11/15 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
使用python远程操作linux过程解析
2019/12/04 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
应届生如何写自荐信
2014/01/05 职场文书
个人投资计划书
2014/05/01 职场文书
答谢会策划方案
2014/05/12 职场文书
保护野生动物倡议书
2014/05/16 职场文书
2014年双拥工作总结
2014/11/21 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript