Js判斷是否聯網引入不同js
阿新 • • 發佈:2018-04-16
clas func Language IT jquer aid target att element
document.write("<script src=‘xxx.js‘><\/script>");
</script>
<script language="javascript">
s1.src="xxx.js"
</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>
需求:當百度地圖在內網中也能使用。
分析: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
<script language="javascript"> $(function(){ var p = new Ping(); p.ping("http://api.map.baidu.com", function(err, data) { if (err) { //離線 $.getScript("http://127.0.0.1:80/bdmap/js/apiv2.0.min.js",function(){ //加載內網js,成功後執行回調函數$("<link>").attr({ rel: "stylesheet",type: "text/css",href: "http://127.0.0.1:80/bdmap/css/bmap.css"}).appendTo("head"); //引入css loadMap(); }); //加載js文件 }else{ //在線 $.getScript("http://api.map.baidu.com/api?v=2.0&ak=xxxxxxxxx",function(){ //加載在線js,成功後執行回調函數 loadMap(); }); //加載js文件 } }); }); </script>
用Ping.js判斷是否聯網。用Jquery的$.getScript( url [, success(script, textStatus, jqXHR) ] )加載js。如果引入的js和其他js必須按照一定順序則在$.getScript()回調函數中再執行$.getScript()。
Js判斷是否聯網引入不同js