动态加载js

来源:互联网 发布:淘宝进店提醒 编辑:程序博客网 时间:2024/04/30 18:47
<script src='' id="s1"></script> <script language="javascript">     s1.src="test.js" </script> 

要实现动态加载JS脚本有4种方法: 

1、直接document.write 
<script language="javascript">     document.write("<script src='test.js'><\/script>"); </script> 





2、动态改变已有script的src属性 




3、动态创建script元素 
<script>     var oHead = document.getElementsByTagName('HEAD').item(0);     var oScript= document.createElement("script");     oScript.type = "text/javascript";     oScript.src="test.js";     oHead.appendChild( oScript); </script> 




  这三种方法都是异步执行的,也就是说,在加载这些脚本的同时,主页面的脚本继续运行,如果用以上的方法,那下面的代码将得不到预期的效果。 

要动态加载的JS脚本:a.js,以下是该文件的内容。 
var str = "中国"; alert( "这是a.js中的变量:" + str ); 






主页面代码: 


<script language="JavaScript"> function LoadJS( id, fileUrl ) {     var scriptTag = document.getElementById( id );     var oHead = document.getElementsByTagName('HEAD').item(0);     var oScript= document.createElement("script");     if ( scriptTag  ) oHead.removeChild( scriptTag  );     oScript.id = id;     oScript.type = "text/javascript";     oScript.src=fileUrl ;     oHead.appendChild( oScript); } LoadJS( "a.js" ); alert( "主页面动态加载a.js并取其中的变量:" + str ); </script> 



上述代码执行后 a.js 的 alert 执行并弹出消息, 



但是 主页面产生了错误,没有弹出对话框。原因是 'str' 未定义,为什么呢?因为主页面在取 str 的时候 a.js 并没有完全加载成功。遇到需要同步执行脚本的时候,可以用下面的第四种方法。 

4、原理:用XMLHTTP取得要脚本的内容,再创建 Script 对象。 

注意:a.js必须用UTF8编码保存,要不会出错。因为服务器与XML使用UTF8编码传送数据。 

主页面代码: 
<script language="JavaScript"> function GetHttpRequest() {     if ( window.XMLHttpRequest ) // Gecko         return new XMLHttpRequest() ;     else if ( window.ActiveXObject ) // IE         return new ActiveXObject("MsXml2.XmlHttp") ; } function AjaxPage(sId, url){     var oXmlHttp = GetHttpRequest() ;     oXmlHttp.OnReadyStateChange = function()      {         if ( oXmlHttp.readyState == 4 )         {             if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )             {                 IncludeJS( sId, url, oXmlHttp.responseText );             }             else             {                 alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;             }         }     }     oXmlHttp.open('GET', url, true);     oXmlHttp.send(null); } function IncludeJS(sId, fileUrl, source) {     if ( ( source != null ) && ( !document.getElementById( sId ) ) ){         var oHead = document.getElementsByTagName('HEAD').item(0);         var oScript = document.createElement( "script" );         oScript.language = "javascript";         oScript.type = "text/javascript";         oScript.id = sId;         oScript.defer = true;         oScript.text = source;         oHead.appendChild( oScript );     } } AjaxPage( "scrA", "b.js" ); alert( "主页面动态加载JS脚本。"); alert( "主页面动态加载a.js并取其中的变量:" + str ); </script> 



现在完成了一个JS脚本的动态加载。 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深夜吃撑了难受怎么办 吃撑了肚子难受怎么办 喝水喝撑了难受怎么办 晚饭吃撑了难受怎么办 吃多了肚子难受怎么办 电信4g信号变3g怎么办 五险交了3月离职怎么办 怎么办工行携程灵通卡 易买得消费卡怎么办 贷款回执单丢了怎么办 医院挂号过号了怎么办 脑子里总是胡思乱想睡不着怎么办 被妹夫给睡了怎么办 被妹夫抱了下怎么办 最里面牙齿烂了怎么办 老公有外遇不承认怎么办 对老公疑心太重怎么办 当你发现老公出轨怎么办 发现自己老婆出轨了怎么办 笔袋密码忘记了怎么办 海关锁密码忘了怎么办 800度近视献了血怎么办 当老公有了外遇妻子该怎么办 妻子有外遇我该怎么办 喜欢拔粗的头发怎么办 小腿长水泡很痒怎么办 脚丫有水泡又痒怎么办 脚上起水泡怎么办很疼 脚上反复长水泡怎么办 高考没考上二本怎么办 车子被扣了60分怎么办 科目三挂了三次怎么办 装修到一半跑了怎么办 13岁自慰被发现怎么办 应用锁密码忘了怎么办 3d缺少dll文件怎么办 真三国无双6闪退怎么办 孙策死了大乔怎么办 30周羊水偏多怎么办 怀孕34周羊水多怎么办 孕34周羊水偏多怎么办