1. 程式人生 > >Js判斷是否聯網引入不同js

Js判斷是否聯網引入不同js

clas func Language IT jquer aid target att element

需求:當百度地圖在內網中也能使用。

分析: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