Google地图:标记图标和弹出窗口

时间:2010-05-20 09:52:05

标签: javascript google-maps

只要点击地图上的标记,下面的代码就会打开一个弹出窗口。它有效:

<script type="text/javascript">
    function popup() {
        newwindow = window.open('test.php','Test','width=800,height=500');
        newwindow.focus();
        return false;
    }

    function addMarker(lat, lng, map){
        var latlng = new google.maps.LatLng(lat,lng);
        var marker = new google.maps.Marker({
            position: latlng,
            map: map
        });
        google.maps.event.addListener(marker, 'click', function() {
            popup();
        });
    }

    function initialize() {
        var myOptions = {
            center: new google.maps.LatLng(47.367633, 8.542557),
            zoom: 5,
            scrollwheel: true,
            mapTypeId: google.maps.MapTypeId.HYBRID,
            mapTypeControlOptions:{
                style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
            },
            navigationControlOptions:{
                style: google.maps.NavigationControlStyle.SMALL
            }
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

        var jsonData = <?php echo $json; ?>;

        for(var i = 0; i < jsonData.length; i += 1){
            addMarker(jsonData[i].lat, jsonData[i].lng, map);
        }
    }
</script>

但是,如果我添加一个标记图标,弹出窗口仍会打开,但它会立即消失在后台,即包含地图的浏览器窗口后面:

function addMarker(lat, lng, map){
    var latlng = new google.maps.LatLng(lat,lng);
    var marker = new google.maps.Marker({
        position: latlng,
        icon: 'myicon.png',
        map: map
    });
    google.maps.event.addListener(marker, 'click', function() {
        popup();
    });
}

这种行为的原因是什么?

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。看起来它与点击事件后请求焦点的Google Map窗口有关。奇怪的是,只有在使用自定义标记图标时才会发生这种情况。

您可以考虑通过稍微延迟1毫秒启动弹出窗口来解决此问题。在Firefox 3.6.3上测试过它似乎解决了你的问题:

function popup() {
   setTimeout(function () {
      var newwindow = window.open('test.php','Test','width=800,height=500');
      newwindow.focus();
   }, 1);
   return false;
}

但是,您也可以考虑不使用弹出窗口。许多用户仍然认为他们是邪恶的,你可能最终会与弹出窗口拦截器争夺。