0

我有一个使用 Google Maps API JavaScript 来显示地图的网站。我还使用 geoxml3 和 ProjectedOverlay 在地图上显示 KMZ/KML 文件。

我的脚本:

<script async defer src="//maps.googleapis.com/maps/api/js?key=API_KEY_HERE&libraries=places"></script>
<script type="text/javascript" src="/js/geoXML/ZipFile.complete.js"></script>
<script type="text/javascript" src="/js/geoXML/geoxml3.js"></script>
<script type="text/javascript" src="/js/geoXML/ProjectedOverlay.js"></script>
<script src="/js/app.js"></script> 

加载页面时出现错误:

Uncaught ReferenceError: google is not defined at ProjectedOverlay.js

Uncaught ReferenceError: google is not defined at PROJECT_NAME:115

将被抛出。

第 115 行如下:

google.maps.event.addDomListener(window, 'load', initMap);

然而,它们并不总是被抛出。这可能每 10 次加载页面就会发生一次。

4

2 回答 2

1

问题是谷歌脚本正在异步加载。geoxml3.js 和 ProjectedOverlay.js 需要完全连接并加载 Google Maps API 才能工作。

如果异步加载,其他 JS 脚本之一将在加载 Google API 之前加载,从而引发错误。

简单的解决方案是删除 Google API 脚本中的异步延迟:

<script src="//maps.googleapis.com/maps/api/js?key=API_KEY_HERE&libraries=places"></script>
于 2017-03-02T10:08:52.203 回答
0

是的,当您在加载之前使用谷歌时会发生这种情况。这是一个非常常见的问题。所以做一个这样的回调函数:

<script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">

<script>
   function initMap() {
       var mapDiv = document.getElementById('map');
       var map = new google.maps.Map(mapDiv, {
          zoom: 8,
          center: new google.maps.LatLng(-34.397, 150.644)
        });
      }
</script>
于 2017-03-02T10:16:29.420 回答