2013-03-22 202 views
3

我試圖使用Google地球插件,並且發現它對於如何調用它更特別:如果在Javascript執行的主流之外調用(例如,通過setTimeout,例如),它只是拒絕調用負載回調。下面的例子是獨立的插圖。改變最後兩行中的哪一行被註釋掉以便看到它是否有效。google.load永遠不會調用回調

發生了什麼事?

<html> 
<head> 
    <title>Sample</title> 
    <script type="text/javascript" src="https://www.google.com/jsapi"> </script> 
    <script type="text/javascript"> 
     var ge; 
     function init() { 
     console.log('Initing'); 
     function cb(instance) { 
      ge = instance; 
      ge.getWindow().setVisibility(true); 
      console.log('Ok'); 
     }; 
     function fail() {} 
     google.earth.createInstance('map3d', cb, fail); 
     } 
     function loadTheMap() { 
     google.load("earth", "1.x"); 
     google.setOnLoadCallback(init); 
     console.log('Callback is set'); 
     } 
     //loadTheMap(); // works 
     setTimeout(loadTheMap, 200); // Does not work 
    </script> 

</head> 
<body> 
    <div id="map3d" style="height: 400px; width: 600px;"></div> 
</body> 
</html> 

回答

6

這是一個計時問題。

google.setOnLoadCallback()可讓您指定頁面加載時調用的函數。

當您使用setTimeout()這樣的,它呼籲setOnLoadCallback()後的頁面已經加載,所以它永遠不會調用你的函數。

而不是使用google.setOnLoadCallback()的你可以這樣做:

function loadTheMap() { 
    google.load("earth", "1.x", {"callback" : init}); 
    console.log('Callback is set'); 
    } 

    setTimeout(loadTheMap, 200); 

我有點困惑,雖然,因爲Google docs說,動態加載不支持地球,但我見過it done in the api samples,它爲我工作(在Chrome中)。

相關問題