谷歌加载永远不会调用回调函数。

3

我正在试图使用Google Earth插件,发现它对调用方式有些挑剔:如果通过setTimeout等方式在Javascript执行的主流程之外进行调用,它就会拒绝调用加载回调函数。以下示例是自包含演示。更改最后两行中的哪一行被注释以查看它是否起作用。

到底发生了什么?

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

我有些困惑,因为Google文档说动态加载在Earth上不受支持,但我在api示例中看到这个操作已被执行,并且在Chrome浏览器中也可以使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接