Question

J'utilise KML pour superposer des formes sur une carte Google. Des informations correspondant à chaque forme est inclus dans l'élément de <description>, et aussi d'un lien dans une page d'informations détaillées correspondant à cette forme.

Ainsi, par exemple, mon KML comprend ceci:

<description>
    <![CDATA[
    <div>

     ...

        <p>
            <a href="Concession.20.aspx">View details</a>
        </p>
        &nbsp;
    </div>
]]>

Bien sûr, je voudrais que ce lien pour ouvrir dans la même fenêtre, car il est tout simplement naviguer vers une autre page sur ce même site. Malheureusement, comme documenté ici , des liens intégrés dans l'élément de <description> un fichier KML sont réécrites avec target='_blank'.

  

Les objectifs sont ignorés lorsqu'ils sont inclus dans   HTML écrit directement dans le KML;   tous ces liens sont ouverts comme si le   cible est réglé sur _blank. tout spécifié   les cibles sont ignorés.

Ma question: Quelqu'un peut-il penser à une solution de contournement qui le surcharger (odieux, à mon humble avis) comportement et forcer ces liens à ouvrir dans la même fenêtre?

À titre d'exemple d'une approche, j'essaie actuellement de passer outre l'événement, cliquez sur ces liens (en utilisant jQuery), mais ils sont générés dynamiquement par Google maps et je ne peux pas sembler obtenir une prise d'eux au début assez.

Était-ce utile?

La solution 2

Je suis venu avec une solution de travail en utilisant jQuery et de la carte infowindowopen événement. Ceci est dans le code d'initialisation de la carte:

    map = new google.maps.Map2(document.getElementById("map"));

    ...

    GEvent.addListener(map, "infowindowopen", function() {
        // Get a reference to the infoWindow
        var infoWindow = $(this.getInfoWindow().getContentContainers());
        // Find all <a> tags in the infoWindow and reset their target attribute
        $("a", infoWindow).attr("target", "_self");
    });

Autres conseils

Je ne pouvais pas ces exemples pour travailler. En fin de compte je l'ai fait dans jQuery qui ouvre le lien dès qu'il clique dessus.

  $('#map_canvas').delegate('a', 'click', function(event) {
    window.location.href=$(this).attr('href');
    return false;
  });

Ce travail pour moi.

<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
function initialize() {
  var myLatlng = new google.maps.LatLng(49.8,15.8);
  var myOptions = {
    zoom: 7,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapTypeControl: false
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  var ctaLayer = new google.maps.KmlLayer('http://zonglovani.info/mapa/mapa-cz.kml');
  ctaLayer.setMap(map);

  google.maps.event.addListener(ctaLayer, 'click', function(kmlEvent) {
    kmlEvent.featureData.description = kmlEvent.featureData.description.replace(/ target="_blank"/ig, "");
  });
}

function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize";
  document.body.appendChild(script);
});

window.onload = loadScript;
</script>

Pour arriver à ces événements de clic, vous pouvez également utiliser les événements en direct jQuery: (Notez que les popups Google Map sont dans une div, soit avec l'id « iw » ou id « iw_kml »)

$('#iw a').live('click', function () {
   $(this)... (Gives you the clicked a-object)

});

événements en direct joindrons à tous les éléments correspondants futurs.

J'ai essayé plusieurs solutions API Google Map V3, mais n'a pas pu faire l'un d'eux pour fonctionner correctement. Voici ma dernière tentative qui semble fonctionner:

google.maps.event.addListener(mapKmlLayer, 'click', function(kmlEvent) {
  kmlEvent.featureData.description = kmlEvent.featureData.description.gsub("_blank", "_self");
}); 

J'ai trouvé une solution plus simple, il suffit d'ajouter un comportement onclick du lien:

onclick='return false;'

vos liens changeront target = "_ self" automatiquement.

mais si vous voulez changer une autre cible, ou pheraps supprimer l'attribut que vous devez ajouter un écouteur et un javascript remplacer comme ceci:

  GEvent.addListener(map,"infowindowprepareopen", function(iwtabs) {
  iwtabs[0].contentElem.innerHTML = iwtabs[0].contentElem.innerHTML.replace("_blank", "_parent");
  });

est très utile à utiliser lorsque vous avez une visionneuse (ou similaire) lien dans la boîte de infowindow.

hourras

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top