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


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

 分析: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()。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM