动态导入js引发的问题
来源:互联网 发布:网络的利与弊ppt图片 编辑:程序博客网 时间:2024/06/05 23:39
比较常见的用于动态导入js的方法有以下两种:
//方法一 document.write("<script language=\"JavaScript\" type=\"text/javascript\" src=\"t.js\"><\/script>"); //方法二 var script = document.createElement("script"); script.src = "t.js"; script.type = "text/javascript"; document.getElementsByTagName("head").item(0).appendChild(script);
今天做动态导入时发现了问题,t.js内容如下:
function M(){alert("m");}
调用代码:
document.write("<script language=\"JavaScript\" type=\"text/javascript\" src=\"t.js\"><\/script>"); M();
脚本出错,提示缺少对象(使用方法二也有同样的问题)。为了说明问题,我们稍做修改,t.js内容如下:
function M(){alert("m");} alert("t.js");
调用代码:
document.write("<script language=\"JavaScript\" type=\"text/javascript\" src=\"t.js\"><\/script>"); alert("index.htm");
可以看到,是先弹出"index.htm",再弹出"t.js",这说明t.js的导入是在页面脚本执行完后进行的,在执行M()时,M函数还未声明,因而报错。解决方法:
<script> function bar(u) { var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest(); x.open("GET",u,false); x.send(null); s=x.responseText; try {window.execScript(s)}catch(ex){window.eval(s)};//Mozilla下window.eval大致与IE的window.execScript方法功能相同 } bar("t.js"); M(); </script>
采用上边方法的不足是:当index.htm和t.js不在同一台服务器上时,index.htm脚本执行会出错,提示没有权限。下边代码摘自QQ首页,测试通过:
<script type="text/javascript"> var MiniSite=new Object(); MiniSite.Browser={ ie:/msie/.test(window.navigator.userAgent.toLowerCase()), moz:/gecko/.test(window.navigator.userAgent.toLowerCase()), opera:/opera/.test(window.navigator.userAgent.toLowerCase()), safari:/safari/.test(window.navigator.userAgent.toLowerCase()) }; MiniSite.JsLoader={ load:function(sUrl,fCallback){ var _script=document.createElement('script'); _script.setAttribute('charset','gb2312'); _script.setAttribute('type','text/javascript'); _script.setAttribute('src',sUrl); document.getElementsByTagName('head')[0].appendChild(_script); if(MiniSite.Browser.ie){ _script.onreadystatechange=function(){ if(this.readyState=='loaded'||this.readyStaate=='complete'){ fCallback(); } }; }else if(MiniSite.Browser.moz){ _script.onload=function(){ fCallback(); }; }else{ fCallback(); } } }; MiniSite.JsLoader.load("http://www.mzwu.com/t.js",function(){M();}); </script>
原文地址: http://www.ai-java.com/entry/117
0 0
- 动态导入js引发的问题
- lr 动态sessionId处理引发的问题
- js其他异常引发的问题
- js放大缩小 引发的问题
- 将excel导入sqlserver2008的表中引发的问题
- 关于项目导入别人jar包引发的问题总结
- Navicat导入时由分号引发的诡异问题
- 怎样动态的导入js文件
- C++中动态内存分配引发问题的解决方案
- C++中动态内存分配引发问题的解决方案
- C++中动态内存分配引发问题的解决方案
- C++中动态内存分配引发问题的解决方案
- C++中动态内存分配引发问题的解决方案
- C++中动态内存分配引发问题的解决方案
- C++中动态内存分配引发问题的解决方案
- Android控制台输出js打印的log引发的问题
- 动态导入js
- JS中URL传中文参数引发的乱码问题
- 【GitHub】-Deep Learning 库比较
- JVM调优总结(五)-分代垃圾回收详述1
- Linux中的EAGAIN含义
- VS2015编写的MFC上位机,波特率可调,可动态显示曲线,可显示三维
- 集合工具类 Collections
- 动态导入js引发的问题
- linux命令crontab
- IOS 多线程初探(二) - Operation Object
- JVM调优总结(六)-分代垃圾回收详述2
- Windbg下无法显示dbgPrint输出的信息
- Python AES使用
- 在UITextView中插入图片
- Android APP权限之sharedUserId和签名
- JVM调优总结(七)-典型配置举例1