Cómo anular target = _blank en ventanas emergentes en KML incrustado mapa de Google?

StackOverflow https://stackoverflow.com/questions/1184921

  •  19-09-2019
  •  | 
  •  

Pregunta

Estoy usando KML para superponer formas en un mapa de Google. Información correspondiente a cada forma se incluye en el elemento de <description>, junto con un enlace a una página de detalle correspondiente a la forma.

Así, por ejemplo, mi KML incluye lo siguiente:

<description>
    <![CDATA[
    <div>

     ...

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

Por supuesto, me gustaría que ese enlace se abra en la misma ventana, ya que es sólo navegar a otra página en este mismo sitio. Por desgracia, como se documenta aquí , los enlaces incorporados en el elemento de <description> un archivo KML se reescriben con target='_blank'.

  

Los objetivos son ignorados cuando se incluye en   HTML escrito directamente en el KML;   todos estos enlaces se abren como si el   destino se establece en _blank. cualquier especificada   objetivos se ignoran.

Mi pregunta: ¿Puede alguien pensar en una solución que reemplazar este (francamente desagradable,) el comportamiento y la fuerza de estos enlaces para abrir en la misma ventana?

Como un ejemplo de un enfoque, actualmente estoy tratando de anular el evento de clic en estos enlaces (usando jQuery), pero son generadas dinámicamente por los mapas de Google y me parece que no puede obtener una bodega de ellos temprano suficiente.

¿Fue útil?

Solución 2

Yo he llegado con una solución de trabajo utilizando jQuery y del mapa infowindowopen evento. Esto está en el código de inicialización para el mapa:

    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");
    });

Otros consejos

No pude conseguir esos ejemplos para trabajar. Al final hice esto en jQuery que abre el vínculo tan pronto como se hace clic en él.

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

Este trabajo para mí.

<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>

Con el fin de llegar a esos eventos de clic, también puede utilizar los eventos de jQuery en vivo: (Tenga en cuenta que las ventanas emergentes de Google Map están en un div o bien con el id 'iw' o el ID 'iw_kml')

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

});

eventos en directo adjuntará a todos los elementos que coinciden con las futuras.

He intentado varias soluciones en Google Map API V3, pero no podía hacer cualquiera de ellos para que funcione correctamente. Aquí está mi último intento que parece funcionar:

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

he encontrado una solución más sencilla, basta con añadir un comportamiento onclick al enlace:

onclick='return false;'

sus enlaces cambiarán a target = "_ self" de forma automática.

pero si desea cambiar a otro objetivo, o pheraps quitar el atributo se debe añadir un oyente y un javascript sustituir de esta manera:

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

Esto es muy útil para utilizar cuando se tiene una caja de luz (o similar) de enlace dentro de la caja de ventana de información.

aplausos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top