需求:当百度地图在内网中也能使用。
分析:js判断是否联网,然后根据联网状态加载不同js。
失败案例:
1、直接document.write
<script language="javascript">
document.write("<script src='xxx.js'><\/script>");
</script>
2、动态改变已有script的src属性
<script src='' id="s1"></script> <script language="javascript">
s1.src="xxx.js" </script>
3、动态创建script元素
<script> var oHead = document.getElementsByTagName('HEAD').item(0); var oScript= document.createElement("script"); oScript.type = "text/javascript"; oScript.src="xxx.js"; oHead.appendChild( oScript); </script>
失败原因:这三种方法都是异步执行的,也就是说,在加载这些脚本的同时,主页面的脚本继续运行。导致下面的new BMap.Map()直接报错。正确的思路是用函数回调保证js加载完毕后继续执行后面代码。
正解:
需要js文件:Jquery.js,
用Ping.js判断是否联网。用Jquery的$.getScript( url [, success(script, textStatus, jqXHR) ] )加载js。如果引入的js和其他js必须按照一定顺序则在$.getScript()回调函数中再执行$.getScript()。