动态加载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 相关文章推荐
常用参考资料(手册)下载或者链接
Jul 22 Javascript
javascript数组使用调用方法汇总
Dec 08 Javascript
理解Javascript_02_理解undefined和null
Oct 11 Javascript
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 Javascript
js 走马灯简单实例
Nov 21 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 Javascript
Jqgrid之强大的表格插件应用
Dec 02 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
javascript实现简易计算器功能
Sep 23 Javascript
原生js实现购物车
Sep 23 Javascript
OpenLayers3加载常用控件使用方法详解
Sep 25 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
常用的php对象类型判断
2008/08/27 PHP
初品cakephp 入门基础
2012/02/16 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
python抽象基类用法实例分析
2015/06/04 Python
Python入门_条件控制(详解)
2017/05/16 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
春节活动策划方案
2014/01/24 职场文书
促销活动总结
2014/04/28 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
离婚协议书范本样本
2014/08/19 职场文书
武当山导游词
2015/02/03 职场文书
班主任开场白
2015/06/01 职场文书
银行求职信怎么写
2019/06/20 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers