2015-10-20 124 views
3

我在我的网站中使用谷歌地图版本3。如何检测谷歌地图是否成功加载

我遇到了地图有时无法加载的问题,但相反它会显示为灰色框,并且浏览器日志中会显示错误 - 很遗憾,我现在无法获取日志,因为地图是再次工作。

根据一些研究,这个问题是因为实验版我使用

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=false"></script> 

有没有办法找出如果地图已成功加载或崩溃,所以我可以告诉用户很快回来?

P.S.我尝试了空闲的事件,但即使地图崩溃,它也被调用。

回答

1

改为收听“tilesloaded”事件。这是在地图(成功)加载并且实际显示地图时触发的最后一个事件。

如果没有地图(例如,您没有明确设置宽度/高度),即使空闲,该事件也不会触发。

您可以使用Map Events示例,并在“网络”选项卡中限制您的连接以执行一些测试。 Here是未为#map设置宽度/高度的示例。

0

在怠速情况下,就下列地图对象:

检查以下内容:

使用if (typeof google === 'object' && typeof google.maps === 'object') {...}检查它是否成功加载。

再检查if(map.getCenter) { var latlng = map.getCenter(); //check here if latlng is object }

如果有任何的“IF”条件失败,这意味着什么是错的。

1

我认为最好或最确定的方法是tilesloaded事件和延迟函数的组合,以测试是否设置了“成功标志”。

/* flag to indicate google maps is loaded */ 
googleMapsLoaded = false; 

/* listen to the tilesloaded event 
    if that is triggered, google maps is loaded successfully for sure */ 
google.maps.event.addListener(map, 'tilesloaded', function() { 
    googleMapsLoaded = true; 
    //clear the listener, we only need it once 
    google.maps.event.clearListeners(map, 'tilesloaded'); 
}); 

/* a delayed check to see if google maps was ever loaded */ 
setTimeout(function() { 
    if (!googleMapsLoaded) { 
    //we have waited 5 secs, google maps is not loaded yet 
    alert('google maps is not loaded'); 
    }  
}, 5000);