Клуб API Карт

Пропадает карта (Chrome + navigator.geolocation + ymaps 2.0 + попап)

patrikfoldes
13 февраля 2015, 17:08

Здравствуйте!

 

Имеем вот такую страницу, все лишнее убрал для простоты:

 

 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

<script src="//api-maps.yandex.ru/2.0-stable/?load=package.full&lang=ru_RU" type="text/javascript">;</script>

<script>

 

ymaps.ready(init);

 

function init(){

geolocMap = new ymaps.Map("YMapsID-geo", {

center: [55.753676,37.619899], 

zoom: 14, 

behaviors: ["default", "scrollZoom"]

});

function error(){

console.log("geolocation error");

}

function success(){

console.log("geolocation success");

}

if(navigator.geolocation){

navigator.geolocation.getCurrentPosition(success, error);

}

}

 

$(document).ready(function(){

var map = $("#YMapsID-geo");

$("#sh").click(function(e){

e.preventDefault();

if(map.is(":visible")){

map.hide();

}else{

map.show();

}

});

});

 

</script>

 

<div id="YMapsID-geo" style="width:500px;height:500px;display:none;"></div>

<a href="#" id="sh">Show/Hide</a>

 

 

Проблема заключается в следующем:

Если на странице имеется Яндекс Карта и используется геолокация через navigator.geolocation, то в случае блокировки геолокации в браузере Google Chrome, карта перестает работать. Но только в случае, если выполняются следующие условия:

1) На момент нажатия кнопки блокировки геолокации контейнер карты должен быть скрыт.

2) До момента нажатия кнопки блокировки геолокации контейнер карты должен быть отображен на странице хотя бы один раз.


Последовательность действий для воспроизведения ошибки на странице код которой указан выше в браузере Chrome (Version 40.0.2214.111 m):

1) убедиться, что вылез запрос браузера на предоставление доступа к местоположению пользователя.

2) нажать на ссылку show/hide, чтобы отобразилась карта, затем снова нажать на эту ссылку, чтобы карту скрыть.

3) нажать на кнопку "Block" в запросе на геолокацию.

4) нажать на ссылку show/hide, должна отобразиться карта, однако на ее месте пустота.


В других браузерах (IE, Firefox) все работает.

2 комментария
Подписаться на комментарии к посту

Уточнение - то же самое происходит, если в геолокации нажать "Allow".

При показе карты из скрытого контейнера всегда лучше явно пересчитать размеры

  

  else {    map.show();    geolocMap.container.fitToViewport();  }