2

Google マップ Javascript V3 を使用して、いくつかのマーカーを設定したマップを作成しました。クリック イベントで InfoWindow をポップアップする各マーカーにリスナーがあります。これはうまくいきます。問題は、ページ上の任意のリンクをクリックして元のページに戻ると、InfoWindows が表示されなくなることです。リスナーにアラート ステートメントを挿入したので、リスナーが実行中であることはわかっていますが、InfoWindows が表示されない理由がわかりません。

これが私のコードです:

<script type="text/javascript">
var map;
var viewable;
var markerArray = new Array();
var infoWindow;
function initialize() {
    infoWindow = new google.maps.InfoWindow({ content: "holding..." });

    var mapOptions = {
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      zoom: 15,
    };

    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

    var bounds = new google.maps.LatLngBounds();
        var loop_latlng = new google.maps.LatLng( 42.341111, -71.080707 );
        marker = addMarker( loop_latlng, "<strong>$1,495.00</strong> <br> Columbus Ave <br> 0 beds / 1 baths <br> <img src='/images/71428455_0.jpg' width=150> <br> <a href='/mls_rn/8305'>get more details</a>" );
        bounds.extend(loop_latlng);        

        var loop_latlng = new google.maps.LatLng( 42.340022, -71.0657278 );
        marker = addMarker( loop_latlng, "<strong>$2,000.00</strong> <br> Union Park St <br> 2 beds / 1 baths <br> <img src='/images/71426623_0.jpg' width=150> <br> <a href='/mls_rn/8253'>get more details</a>" );
        bounds.extend(loop_latlng);        

    map.setCenter(bounds.getCenter());
    map.fitBounds(bounds);
    showMarkers();
}

function addMarker(location,contentString) {

  var iw = new google.maps.InfoWindow({
    content: contentString
  });

  var marker = new google.maps.Marker({
    position: location,
    animation: google.maps.Animation.DROP,
    content: contentString,
    map: map
  });

  google.maps.event.addListener(marker,'click',function(){
    infoWindow.setContent(this.content); 
    infoWindow.open(map,this);
  });

  markerArray.push(marker); 

  return marker;
}


// display all the markers on the map
function showMarkers() {
  if (markerArray) {

    for ( i in markerArray ) {
      markerArray[i].setMap(map);
    }
  }
}


function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.googleapis.com/maps/api/js?key=AIzaSyCICKRjJ3Vo_l2hy5uV7GdkYBot6jCtZzI&sensor=true&callback=initialize";
  document.body.appendChild(script);
}
window.onload = loadScript;
</script>

これは実際にはRailsの問題である可能性があると思います。これを切り取って HTML ドキュメントに貼り付けると、問題なく動作するようです。ただし、Rails アプリ内では、オフの動作が見られます。私が気づいたことの 1 つは、純粋な HTML の場合はマップが再初期化されるように見えるが、Rails では再初期化されないように見えることです。もっと調べてコメントします。誰かがこれを以前に見たことがあれば; ただし、チャイムインしてください!

4

1 に答える 1

0

あなたが説明した動作は、公式の情報ウィンドウのサンプルでは発生しないため、コードがまったく同じように動作することを期待しています。

このような機能を手動でプログラムする必要があります。HTML5 準拠のブラウザでは、pageshowイベントを使用して情報ウィンドウを手動で開くことができます。ただし、Internet Explorer の現在のすべてのバージョン (10.0 未満) はこのイベントをサポートしていないため、ウィンドウloadイベントでもこれを処理する必要があります。

于 2012-09-06T13:43:39.470 に答える