2013-02-04 157 views
2

我使用下面的代碼加載谷歌地圖API的腳本異步在IE9:谷歌地圖API異步加載

function initialize() { 
    ... 
} 

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; 

現在的事情是,當腳本滿載的initialize()功能被自動調用。但是,當有時超過用戶配額時,initialize()函數不會被調用,而不是地圖,我們會看到純白色屏幕。

我想檢測到這一點,並啓動我的自定義功能,它顯示一些警告,如:"Error!"

任何人都可以告訴我如何做到這一點?

在此先感謝...

+1

你確定沒有調用'initialize()'嗎?如果不是,則無法做任何事情,因爲做任何事情都意味着更改您從Google接收的API代碼。如果您的配額已超出,您可以嘗試將結算功能添加到您的Google控制檯。 –

+0

哦...我想如果有一些具體的解決方案來解決這個問題。無論如何,謝謝安德魯。 – user2004685

+0

我不知道達到配額時究竟發生了什麼,但是當您觀察加載的腳本的'onerror'事件時,它可能會工作。 –

回答

1

安德魯提到,沒有處理這種直接的方式。但是,至少可以說明這種可能性。

在合理的時間範圍內設置超時(5次)。在超時回調函數中,測試google和/或google.maps是否存在。如果它不存在,則假定腳本加載失敗。

setTimeout(function() { 
    if(!window.google || !window.google.maps) { 
    //handle script not loaded 
    } 
}), 5000); 
// Maps api asynchronous load code here. 
+0

謝謝先生,我認爲這會做到這一點! :) – user2004685

+0

我試過這個片段,但它沒有工作,如果我們把它放在回調函數中,因爲在腳本加載失敗時從未調用回調函數! – user2004685

+0

正確 - 這段代碼必須是全球性的。 –

0

我終於找到了解決這個問題的辦法。乍得給出了一個很好的解決方案,但唯一的是你不能把這段代碼放在callback()函數中,因爲如果腳本加載失敗,callback()函數永遠不會被調用!

那麼基於什麼乍得提到我終於想出了以下解決方案:

function initialize() { 
    ... 
} 

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"; 
    setTimeout(function() { 
     try{ 
      if (!google || !google.maps) { 
       //This will Throw the error if 'google' is not defined 
      } 
     } 
     catch (e) { 
      //You can write the code for error handling here 
      //Something like alert('Ah...Error Occurred!'); 
     } 
    }, 5000); 
    document.body.appendChild(script); 
} 

window.onload = loadScript; 

這似乎爲我工作得很好! :)

+0

僅當您使用google而不是window.google時纔會引發錯誤 – gtournie