Карты Google: значок маркера и всплывающее окно - PullRequest
3 голосов
/ 20 мая 2010

Приведенный ниже код открывает всплывающее окно при каждом нажатии на маркер на карте. Работает:

<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 Ответ

1 голос
/ 20 мая 2010

Это интересный вопрос. Похоже, это связано с окном карты Google, запрашивающим фокус после события клика. Странно, как это происходит только при использовании пользовательского значка маркера.

Вы можете обойти эту проблему, запустив всплывающее окно с небольшой задержкой в ​​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;
}

Однако вы также можете не использовать всплывающие окна. Многие пользователи по-прежнему считают их злыми, и вам, вероятно, придется постоянно бороться с блокировщиками всплывающих окон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...