Como substituir o destino = _blank em pop -ups KML no mapa do Google incorporado?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Estou usando o KML para sobrepor formas em um mapa do Google. Informações correspondentes a cada forma estão incluídas no <description> elemento, juntamente com um link para uma página de detalhes correspondente a essa forma.

Por exemplo, meu KML inclui o seguinte:

<description>
    <![CDATA[
    <div>

     ...

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

Obviamente, eu gostaria que esse link seja aberto na mesma janela, pois está apenas navegando para outra página neste mesmo site. Infelizmente, conforme documentado aqui, links incorporados no <description> O elemento de um arquivo KML é reescrito com target='_blank'.

Os alvos são ignorados quando incluídos no HTML escrito diretamente no KML; Todos esses links são abertos como se o destino estivesse definido como _bank. Quaisquer metas especificadas são ignoradas.

Minha pergunta: alguém pode pensar em uma solução alternativa que substituiria esse comportamento (desagradável, IMHO) e forçar esses links a abrir na mesma janela?

Como exemplo de uma abordagem, atualmente estou tentando substituir o evento de cliques nesses links (usando o jQuery), mas eles são gerados dinamicamente pelo Google Maps e não consigo se apossar deles cedo o suficiente.

Foi útil?

Solução 2

Eu criei uma solução de trabalho usando jQuery e o mapa infowindowopen evento. Isso está no código de inicialização do 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");
    });

Outras dicas

Eu não conseguia fazer esses exemplos funcionarem. No final, fiz isso no jQuery, que abre o link assim que ele é clicado.

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

Este trabalho para mim.

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

Para chegar a esses eventos de cliques, você também pode usar os eventos do JQuery Live: (Observe que os pop -ups do Google Map estão em uma div, com o id 'iw' ou o id 'iw_kml')

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

});

Eventos ao vivo irá anexar a todos os elementos de correspondência futuros.

Tentei várias soluções no Google Map API V3, mas não consegui fazer com que nenhuma delas funcionasse corretamente. Aqui está minha última tentativa que parece funcionar:

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

Encontrei uma solução mais simples, basta adicionar um comportamento OnClick ao link:

onclick='return false;'

Seus links mudarão para Target = "_ self" automaticamente.

Mas se você deseja mudar para outro alvo, ou as fererapias removem o atributo, você deve adicionar um ouvinte e um JavaScript Substituir assim:

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

Isso é muito útil para usar quando você tem um link de caixa de luz (ou similar) dentro da caixa de infowindow.

Felicidades

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top