5

KMLを使用してGoogleマップに図形をオーバーレイしています。各形状に対応する情報は、<description>その形状に対応する詳細ページへのリンクとともに要素に含まれています。

たとえば、私のKMLには次のものが含まれています。

<description>
    <![CDATA[
    <div>

     ...

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

もちろん、同じサイトの別のページに移動しているだけなので、同じウィンドウでそのリンクを開きたいと思います。残念ながら、ここに記載されているよう<description>に、KMLファイルの要素に埋め込まれたリンクは。で書き換えられtarget='_blank'ます。

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

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

1つのアプローチの例として、現在、これらのリンクのクリックイベントを(jQueryを使用して)オーバーライドしようとしていますが、Googleマップによって動的に生成されており、十分に早く把握できないようです。

4

6 に答える 6

6

I couldn't get those examples to work. In the end I did this in jQuery which opens the link as soon as it's clicked.

  $('#map_canvas').delegate('a', 'click', function(event) {
    window.location.href=$(this).attr('href');
    return false;
  });
于 2011-12-16T13:16:13.763 に答える
3

infowindowopenjQuery とマップのイベントを使用して実用的なソリューションを考え出しました。これは、マップの初期化コードにあります。

    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");
    });
于 2009-07-26T18:55:15.827 に答える
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>
于 2010-08-22T08:16:00.767 に答える
1

これらのクリック イベントを取得するために、jQuery ライブ イベントを使用することもできます (Google マップのポップアップは、id 'iw' または id 'iw_kml' のいずれかの div にあることに注意してください)。

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

});

ライブ イベントは、今後のすべての一致する要素に関連付けられます。

于 2009-12-07T09:38:53.980 に答える
1

Google Map API V3 でいくつかのソリューションを試しましたが、どれも適切に機能させることができませんでした。これがうまくいくように見える私の最新の試みです:

google.maps.event.addListener(mapKmlLayer, 'click', function(kmlEvent) {
  kmlEvent.featureData.description = kmlEvent.featureData.description.gsub("_blank", "_self");
}); 
于 2010-07-07T21:21:00.457 に答える
0

私はより簡単な解決策を見つけました.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");
  });

これは、情報ウィンドウ ボックス内にライトボックス (または同様の) リンクがある場合に使用すると非常に便利です。

乾杯

于 2010-01-14T09:26:03.757 に答える