如何在嵌入式Google地图的KML弹出窗口中覆盖target = _blank?

我正在使用KML在Google地图上叠加形状。 对应于每个形状的信息包括在元素中,以及指向与该形状对应的细节页面的链接。

例如,我的KML包括:

  <![CDATA[ 
...

View details

 
]]>

当然,我希望该链接在同一个窗口中打开,因为它只是导航到同一站点上的另一个页面。 不幸的是, 如此处所述 ,嵌入在KML文件的元素中的链接将被target='_blank'重写。

当包含在直接写入KML的HTML中时,目标会被忽略; 打开所有这些链接,就好像目标设置为_blank一样。 忽略任何指定的目标。

我的问题:任何人都可以想到一个可以覆盖这个(令人讨厌的,恕我直言)行为并强制在同一窗口中打开这些链接的解决方法吗?

作为一种方法的一个例子,我目前正在尝试覆盖这些链接上的click事件(使用jQuery),但它们是由Google地图动态生成的,我似乎无法及早掌握它们。

我无法让这些例子起作用。 最后我在jQuery中做了这个,它在点击后立即打开链接。

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

我已经提出了一个使用jQuery和map的infowindowopen事件的工作解决方案。 这是在地图的初始化代码中:

  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  tags in the infoWindow and reset their target attribute $("a", infoWindow).attr("target", "_self"); }); 

这对我有用。

   

为了获得这些点击事件,您还可以使用jQuery实时事件:(请注意,Google Map弹出窗口位于div中,ID为“iw”或id为“iw_kml”)

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

直播活动将附加到所有未来的匹配元素。

我在Google Map API V3中尝试了几种解决方案,但无法使其中任何一种解决方案正常工作。 这是我最近的尝试似乎有效:

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

我找到了一个更简单的解决方案,只需在链接中添加一个onclick行为:

 onclick='return false;' 

您的链接将自动更改为target =“_ self”

但是如果你想改变到其他目标,或者pheraps删除属性你应该添加一个监听器和一个javascript替换如下:

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

当你在infowindow框内有一个lightbox(或类似的)链接时,这非常有用。

干杯