动态加载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 相关文章推荐
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
iframe的onreadystatechange事件在firefox下的使用
Apr 16 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
angular.element方法汇总
Jan 07 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
JavaScript制作简单分页插件
Sep 11 Javascript
详解jQuery简单的表单应用
Dec 16 Javascript
JS通用方法触发点击事件代码实例
Feb 17 Javascript
JS中==、===你分清楚了吗
Mar 04 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 Javascript
jQuery实现动态向上滚动
Dec 21 jQuery
原生js实现放大镜组件
Jan 22 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实现将标点符号正则替换为空格的方法
2017/08/09 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
详解javascript void(0)
2020/07/13 Javascript
Python下rrdtool模块的基本使用方法
2015/11/13 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
python 对key为时间的dict排序方法
2018/10/17 Python
详解Python做一个名片管理系统
2019/03/14 Python
浅析PEP572: 海象运算符
2019/10/15 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
中专自我鉴定范文
2013/10/16 职场文书
煤矿班组长的职责
2013/12/25 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
企业安全生产标语
2014/06/06 职场文书
群众路线党员自我评议范文2014
2014/09/24 职场文书
神农溪导游词
2015/02/11 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js