Google地图Javascript API仅在控制台处于打开状态时加载数据

时间:2017-04-12 10:14:13

标签: javascript google-maps google-maps-api-3

我正在尝试在我的页面上显示一个地图,该地图设置了一个标记。

我的问题是什么

地图实例没有任何问题。控制台或谷歌自己都没有错误。但遗憾的是,地图数据未加载。我只是得到了Google徽标和灰色背景,如图所示。 Grey map from Google Maps API

然后,当我打开谷歌浏览器的控制台时,它会加载地图数据,并显示包含所请求地图类型的地图。

Loaded data after opening the developer console

我尝试了什么

我在互联网上搜索,发现了其他一些问题,比如灰盒子,但解决方案对我没有帮助。

现在我的代码看起来像这样:

<div id="map" style="width:100%;height:400px;"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&callback=initMap"></script>
<script>
function initMap() {
   //Just some example coordinates
   var lat = 47.8;
   var lon = 8.9
   var location = {lat: lat, lng: lon};
   var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 8,
      center: location,
      mapTypeId: google.maps.MapTypeId.ROADMAP
   });
   var marker = new google.maps.Marker({
      position: location,
      map: map
   });
}
google.maps.event.addDomListener(window, 'load', initMap);
</script>

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

它并不完美,但您可以尝试在加载地图时强制调整大小:

google.maps.event.addListenerOnce(map, 'idle', function(){
    $(window).trigger('resize'); 
});

或者没有jQuery:

google.maps.event.addListenerOnce(map, 'idle', () => {
    const event = new Event('resize');
    window.dispatchEvent(event);
});

答案 1 :(得分:1)

您不需要添加DOM侦听器。地图应该只加载这个脚本:

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

和initMap函数。

编辑: DOM Listener正等着你去加载&#34;在加载地图之前,DOM等着你打开控制台。