3

私はGoogleEarthプラグインを使おうとしていますが、その呼び出し方法にかなりこだわっています。Javascript実行のメインフローの外部で呼び出された場合(たとえば、setTimeoutを介して)、ロードの呼び出しを拒否するだけです。折り返し電話。以下の例は、自己完結型の図です。最後の2行のどちらがコメントアウトされているかを変更して、機能するかどうかを確認します。

どうしたの?

<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>
4

1 に答える 1

6

これはタイミングの問題です。

google.setOnLoadCallback()ページの読み込み時に呼び出される関数を指定できます。

このように使用すると、ページが既に読み込まれたsetTimeout()に呼び出されるため、関数が呼び出されることはありません。setOnLoadCallback()

使用する代わりに、これをgoogle.setOnLoadCallback()行うことができます:

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

  setTimeout(loadTheMap, 200);

グーグルのドキュメントは動的ローディングはEarthではサポートされていないと言っているので、私は少し混乱していますが、APIサンプルでそれが行われているのを見ました、そしてそれは私のために(Chromeで)動作します。

于 2013-03-22T16:56:11.883 に答える