2013-03-22 2 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 docs 동적 로딩이 지구를 지원하지 않습니다라고 때문에
function loadTheMap() { 
    google.load("earth", "1.x", {"callback" : init}); 
    console.log('Callback is set'); 
    } 

    setTimeout(loadTheMap, 200); 

내가 비록 혼란 조금 해요,하지만 난 it done in the api samples을 본 적이과 :

대신 google.setOnLoadCallback()를 사용하는이 작업을 수행 할 수 나를 위해 일합니다 (Chrome에서).

관련 문제