谷歌.Load从不调用callback

google.load never calls callback

本文关键字:调用 callback Load 谷歌      更新时间:2023-09-26

我正在尝试使用Google Earth插件,并发现它的调用方式相当特别:如果在Javascript执行的主要流程之外调用(例如通过setTimeout),它只是拒绝调用加载回调。下面的例子是一个独立的说明。更改更改最后两行中哪一行被注释掉,看看它是否工作。

怎么回事?

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

这是一个时间问题。

google.setOnLoadCallback()允许您指定在页面加载时调用的函数。

当你这样使用setTimeout()时,它会在页面已经加载后调用setOnLoadCallback() ,所以它永远不会调用你的函数。

您可以这样做,而不是使用google.setOnLoadCallback():

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

我有点困惑,虽然,因为谷歌文档说,动态加载是不支持地球,但我已经看到它在api样本,它为我工作(在Chrome)。