动态加载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 相关文章推荐
Web开发者必备的12款超赞jQuery插件
Dec 03 Javascript
javascript innerHTML使用分析
Dec 03 Javascript
jquery 年会抽奖程序
Dec 22 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
Bootstrap每天必学之日期控制
Mar 07 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
vue axios封装及API统一管理的方法
Apr 18 Javascript
使用uni-app开发微信小程序的实现
Dec 13 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类Class的概念
2012/06/14 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
详解Python中的type和object
2018/08/15 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python常见的pandas用法demo示例
2019/03/16 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
python绘制雷达图实例讲解
2021/01/03 Python
基于Python实现天天酷跑功能
2021/01/06 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
视图的作用
2014/12/19 面试题
MySQL面试题目集锦
2016/04/14 面试题
2015年仓管员工作总结
2015/04/21 职场文书
小学生表扬稿范文
2015/05/05 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis