2009-07-26 5 views
5

私はKMLを使用してGoogleマップに図形を重ねています。 <description>要素には、各図形に対応する情報と、その図形に対応する詳細ページへのリンクが含まれています。埋め込みGoogleマップのKMLポップアップでtarget = _blankをオーバーライドする方法はありますか?

したがって、たとえば、私のKMLは、この含まれています:もちろん

<description> 
    <![CDATA[ 
    <div> 

    ... 

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

をそれだけで、これと同じで、別のページに移動なので、私は、同じウィンドウで開くようにそのリンクのための希望しますサイト。残念ながらas documented hereの場合、KMLファイルの<description>要素に埋め込まれているリンクはtarget='_blank'に書き換えられます。

に含まれるとターゲットが無視されます.KMLに直接書き込まれたHTML。 このようなリンクはすべて、 ターゲットが_blankに設定されているかのように開かれます。指定された ターゲットはすべて無視されます。

私の質問:誰もこの(不快な、IMHO)の動作を無効にし、これらのリンクを同じウィンドウで開くようにする回避策を考えることができますか?

私は現在、(jQueryを使用して)これらのリンクのクリックイベントを無効にしようとしていますが、Googleマップで動的に生成されているため、それらを保持できないようです早期に十分な。

答えて

3

私は、jQueryとマップの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 <a> tags in the infoWindow and reset their target attribute 
     $("a", infoWindow).attr("target", "_self"); 
    }); 
+0

ありがとうございました。私は朝、これを自分自身で理解しようとしていました。私は実際にjquery.jmap.jsを使用しており、これはAddFeedメソッドのオプションとして公開されていると便利だと思います。私はそれがなぜこのように振舞うのか理解していますが、単純なフラグがいいでしょう。 – ironfroggy

+0

これはもううまくいかないようです...私はリンクのターゲットを変更することができました(そしてクロムインスペクタで見ました)が、クリックすると新しいウィンドウでページが開かれ、ターゲットは '_blank'に変更されましたもう一度=( –

1

あなたはまた、jQueryのライブイベントを使用することができます:これは、マップの初期化コードである(Googleマップのポップアップがいずれかのidを持つdiv要素であることに注意してください'IW' やID 'iw_kml')

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

}); 

Live events将来のすべての整合素子に付着します。

0

私はちょうどリンクにonclickの動作を追加し、より簡単な解決策を見つけた:

onclick='return false;' 

あなたのリンクが自動的に=「_自己」ターゲットに変更されます。

いますが、他のターゲットへの変更、またはpherapsこのように置き換えるリスナーとJavaScriptを追加する必要があり、属性を削除する場合:(

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

を、これはあなたをライトボックスを持っているときに使用することは非常に便利ですか同様の)リンクを表示することができます。

歓声

1

私はGoogleマップAPI V3でのいくつかのソリューションを試みたが、それらのいずれかが正常に動作するように作ることができませんでした。私の最近の試みはうまくいくようです:

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

この作品は私のためのものです。

<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

私はこれらの例を動作させることができませんでした。最後に、jQueryでこれを行いました。クリックするとすぐにリンクが開きます。

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

ありがとう!私はOpenStreetMapのリンクにREL属性を追加しようとしていますので、jQuery Tools Overlayを使用することができます。 – Jason

関連する問題