如何关闭POI的InfoWindow?

时间:2016-01-13 18:34:58

标签: google-maps-api-3

点击链接后,我试图关闭POI InfoWindow

我像这样覆盖了InfoWindow的setContent:

//override the built-in setContent-method
google.maps.InfoWindow.prototype.setContent = function (content) {              
    content = content.innerHTML + '<br/> <a href="#" onclick="onSavePlace();">Save place</a>';
    //run the original setContent-method
    fx.apply(this, arguments);
};

注意:我没有创建任何InfoWindow对象来引用close()方法。

1 个答案:

答案 0 :(得分:1)

在覆盖函数中捕获对infowindow的全局引用,以便您可以引用它来关闭它。

你对infowindow的覆盖不起作用。我从这个问题中找到了一个工作版本:How to get a click event when a user clicks a (business) place on the map

proof of concept fiddle

代码段

&#13;
&#13;
var geocoder;
var map;
var infowindow;

//keep a reference to the original setPosition-function
var fx = google.maps.InfoWindow.prototype.setPosition;

// from https://stackoverflow.com/questions/24234106/how-to-get-a-click-event-when-a-user-clicks-a-business-place-on-the-map/24234818#24234818
//override the built-in setPosition-method
google.maps.InfoWindow.prototype.setPosition = function() {
  //logAsInternal isn't documented, but as it seems
  //it's only defined for InfoWindows opened on POI's
  if (this.logAsInternal) {

    // save reference in global infowindow variable.
    infowindow = this;

    google.maps.event.addListenerOnce(this, 'map_changed', function() {
      var map = this.getMap();
      //the infoWindow will be opened, usually after a click on a POI
      if (map) {
        //trigger the click
        google.maps.event.trigger(map, 'click', {
          latLng: this.getPosition()
        });
      }
    });
  }
  //call the original setPosition-method
  fx.apply(this, arguments);
};

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  google.maps.event.addDomListener(document.getElementById('btn'), 'click', function(e) {

    // close the last opened POI infowindow
    infowindow.close();

  });

}
google.maps.event.addDomListener(window, "load", initialize);
&#13;
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
&#13;
<script src="https://maps.googleapis.com/maps/api/js"></script>
<input id="btn" type="button" value="close IW" />
<div id="map_canvas"></div>
&#13;
&#13;
&#13;