你如何引用系统信息窗口

时间:2014-07-18 15:57:49

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

当您点击Google地图上的某个POI时,地图引擎会打开一个系统内置信息窗口。 如何获得对该窗口的引用(我想在下一次单击地图时将其关闭)。

2 个答案:

答案 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);
  };})();

演示:http://jsfiddle.net/doktormolle/Q7Gbb/