动态加载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获取GridView选择的行内容
Apr 14 Javascript
js 通用javascript函数库整理
Aug 14 Javascript
js无刷新操作table的行和列
Mar 27 Javascript
JS不能跨域借助jquery获取IP地址的方法
Aug 20 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
jquery实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
微信小程序实现YDUI的ScrollNav组件
Feb 02 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
修改NPM全局模式的默认安装路径的方法
Dec 15 Javascript
原生JavaScript实现幻灯片效果
Feb 19 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
PHP二维数组的去重问题解析
2011/07/17 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python实现批量下载新浪博客的方法
2015/06/15 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
怎样使用Python脚本日志功能
2016/08/14 Python
python中常用的九种预处理方法分享
2016/09/11 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
python实现数字炸弹游戏程序
2020/07/17 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
护士辞职信模板
2014/01/20 职场文书
活动倡议书范文
2014/05/13 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
公司收款委托书范本
2014/09/20 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书