动态导入js引发的问题
比较常见的用于动态导入js的方法有以下两种:
?
今天做动态导入时发现了问题,t.js内容如下:
?脚本出错,提示缺少对象(使用方法二也有同样的问题)。为了说明问题,我们稍做修改,t.js内容如下:?
?
可以看到,是先弹出"index.htm",再弹出"t.js",这说明t.js的导入是在页面脚本执行完后进行的,在执行M()时,M函数还未声明,因而报错。解决方法:
<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