如何在嵌入式Google地图的KML弹出窗口中覆盖target = _blank?
我正在使用KML在Google地图上叠加形状。 对应于每个形状的信息包括在元素中,以及指向与该形状对应的细节页面的链接。
例如,我的KML包括:
<![CDATA[ ... ]]>
当然,我希望该链接在同一个窗口中打开,因为它只是导航到同一站点上的另一个页面。 不幸的是, 如此处所述 ,嵌入在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(或类似的)链接时,这非常有用。
干杯