2012-06-20 76 views
1

嘗試異步加載Google地圖,以便HTML頁面的開始速度更快。異步加載Google地圖時處理網絡斷開連接

已使用鏈接中提到的以下代碼:https://developers.google.com/maps/documentation/javascript/tutorial#asynch。部分:異步加載API。

function initialize() { 
    var myOptions = { 
    zoom: 8, 
    center: new google.maps.LatLng(-34.397, 150.644), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
} 

function loadScript() { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize"; 
    document.body.appendChild(script); 
} 

window.onload = loadScript; 

問題:

  1. 當調用loadScript()功能後,網絡不通。目前我們還是無法找到檢查網絡連接是否終止&做適當的錯誤處理。
  2. 即使網絡可用一些回調函數'initialize()'永遠不會被調用。
  3. 即使在3G網絡上,谷歌地圖在移動設備上的加載速度也非常緩慢。

    在上述兩種情況下,我們都會在調用loadScript()後立即啓動加載圖標。由於initialize()未被回叫,因此無限時間在加載圖標中被阻止。

請提供一些指針來處理網絡斷開&回調函數未調用的問題。

回答

1

Maps API沒有處理此問題的原生方式。謝天謝地,HTML5的確如此。聽document.online/document.offline事件是非常有效的,我用它來解決這個問題。

參見https://developer.mozilla.org/en/DOM/document#Event_handlers

這在至少的iOS 5和Android 2.3支持。

您也可以使用setTimeout來檢查API回調是否已經發生,如果不是,則適當處理它。