2009-07-26 18 views
5

Estoy usando KML para superponer formas en un mapa de Google. La información correspondiente a cada forma se incluye en el elemento <description>, junto con un enlace a una página de detalles correspondiente a esa forma.¿Cómo sobrescribir target = _blank en ventanas emergentes KML en el mapa de Google incorporado?

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 para ese enlace para abrir en la misma ventana, ya que es sólo navegar a otra página en esta misma sitio. Desafortunadamente, as documented here, los enlaces incrustados en el elemento <description> de un archivo KML se reescriben con target='_blank'.

Los objetivos se ignoran cuando se incluyen en HTML escrito directamente en el archivo KML; todos los enlaces se abren como si el objetivo estuviera configurado en _blank. Se ignoran los objetivos especificados.

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 ejemplo de un enfoque, actualmente estoy intentando anular el evento click en estos enlaces (usando jQuery), pero son generados dinámicamente por los mapas de Google y parece que no puedo obtenerlos. Suficientemente pronto.

Respuesta

3

He encontrado una solución de trabajo usando jQuery y el evento infowindowopen del mapa. 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"); 
    }); 
+0

Gracias, estaba intentando toda la mañana para resolver esto yo mismo. De hecho, estoy usando jquery.jmap.js y creo que esto sería útil como una opción para su método AddFeed. Entiendo por qué se comporta de esta manera, pero una simple bandera sería agradable. – ironfroggy

+0

Parece que esto ya no funciona ... Logré cambiar el objetivo del enlace (y lo vi en el inspector de Chrome) pero al hacer clic, la página se abrió en la nueva ventana de todos modos y el objetivo cambió a '_blank' de nuevo = ( –

1

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) 

}); 

Live events adjuntará a todos los elementos que coinciden con las futuras.

0

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" automáticamente.

pero si desea cambiar a otro objetivo, o pheraps quitar el atributo se debe añadir un oyente y un javascript reemplazar así:

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) enlace dentro del cuadro de infowindow.

aplausos

1

He intentado varias soluciones en Google Map API V3, pero no podían hacer que 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"); 
}); 
2

Esto funciona 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> 
6

No pude conseguir que esos ejemplos funcionen. Al final hice esto en jQuery, que abre el enlace tan pronto como se hace clic.

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

muchas gracias! He estado tratando de agregar un atributo REL a un enlace en OpenStreetMap para poder usar la superposición de herramientas de jQuery. Esto me lleva al 90%. – Jason

Cuestiones relacionadas