web-dev-qa-db-fra.com

Vérifiez si infowindow est ouvert Google Maps v3

S'il vous plaît, j'ai besoin d'aide.

Je veux vérifier si ma sous-fenêtre est ouverte.

Par exemple:

if (infowindow.isOpened)
{
   doSomething()
}

ou

if (infowindow.close)
{
   doAnotherthing();
}

Je ne sais pas comment faire ça

31
Fred Vicentin

Jusqu'à ce que Google ne nous donne pas de meilleure façon de procéder, vous pouvez ajouter une propriété aux objets infoWindow. Quelque chose comme:

google.maps.InfoWindow.prototype.opened = false;
infoWindow = new google.maps.InfoWindow({content: '<h1> Olá mundo </h1>'});

if(infoWindow.opened){
   // do something
   infoWindow.opened = false;
}
else{
   // do something else
   infoWindow.opened = true;
}
23
pedro

J'ai modifié le prototype de google.maps.InfoWindow et changé open/close pour définir/effacer une propriété:

//
// modify the prototype for google.maps.Infowindow so that it is capable of tracking
// the opened state of the window.  we track the state via boolean which is set when
// open() or close() are called.  in addition to these, the closeclick event is
// monitored so that the value of _openedState can be set when the close button is
// clicked (see code at bottom of this file).
//
google.maps.InfoWindow.prototype._open = google.maps.InfoWindow.prototype.open;
google.maps.InfoWindow.prototype._close = google.maps.InfoWindow.prototype.close;
google.maps.InfoWindow.prototype._openedState = false;

google.maps.InfoWindow.prototype.open =
    function (map, anchor) {
        this._openedState = true;
        this._open(map, anchor);
    };

google.maps.InfoWindow.prototype.close =
    function () {
        this._openedState = false;
        this._close();
    };

google.maps.InfoWindow.prototype.getOpenedState =
    function () {
        return this._openedState;
    };

google.maps.InfoWindow.prototype.setOpenedState =
    function (val) {
        this._openedState = val;
    };

Vous devez également surveiller l'événement closeclick car cliquer sur le bouton de fermeture n'appelle pas close ().

//
// monitor the closelick event and set opened state false when the close
// button is clicked.
//
(function (w) {
    google.maps.event.addListener(w, "closeclick", function (e) {
        w.setOpenedState(false);
    });
})(infowindow);

L'appel de InfoWindow.getOpenedState() renvoie un booléen qui reflète l'état (ouvert/fermé) de la fenêtre de sous-fenêtre.

J'ai choisi de le faire de cette façon au lieu d'utiliser la méthode InfoWindow.getMap() ou MVCObject.get('map') en raison des pièges bien connus de l'utilisation d'un comportement non documenté. Cependant, Google utilise MVCObject.set('map', null) pour forcer la suppression de l'InfoWindow du DOM, il est donc peu probable que cela change ...

12
John Sully

infowindow.getMap () renvoie null si infowindow est fermé. Vous pouvez donc utiliser simplement

if (infowindow.getMap ());

0