当您点击Google地图上的某个POI时,地图引擎会打开一个系统内置信息窗口。 如何获得对该窗口的引用(我想在下一次单击地图时将其关闭)。
答案 0 :(得分:3)
这是在Google Maps API问题跟踪器中跟踪的问题#4797,最近已修复,并在3.26版中提供。
从版本3.26开始,你应该听到"点击" Map对象上的事件。如果用户点击POI,则会引发IconMouseEvent。此类扩展了Regular MouseEvent,并包含一个名为placeId的属性。因此,您可以检查事件对象是否已定义placeId。 placeId字段当然包含Place Id,您可以使用Places API获取有关所点击图标的更多信息。
我准备了一个小型演示:http://jsbin.com/parapex/10/edit?html,output
简而言之,您的地图"点击"事件处理程序应如下所示:
// This is the click event handler
var handleClick = function(event) {
// If the event has a placeId, use it.
if (event.placeId) {
// Calling e.stop() on the event prevents the default info window
// from showing.
// If you call stop here when there is no placeId you will prevent
// some other map click event handlers from receiving the event.
event.stop();
// do something with event.placeId here. Like calling places service
}
};
答案 1 :(得分:2)
之前有过类似的问题:
方法是覆盖Infowindow原型的方法以获得参考,改编的代码:
//run this after loading the maps-api
(function(){
var fx = google.maps.InfoWindow.prototype.setContent;
//override the built-in setContent-method
google.maps.InfoWindow.prototype.setContent = function () {
//this property isn't documented, but as it seems
//it's only defined for InfoWindows opened on POI's
if (this.logAsInternal) {
google.maps.event.addListenerOnce(this, 'map_changed',function () {
var map = this.getMap(),that=this;
//attach the click-handler when the infowindow opens
if (map) {
google.maps.event.addListenerOnce(map, 'click', function(){that.close();});
}
});
}
//call the original setContent-method
fx.apply(this, arguments);
};})();