Задать вопрос
Anadi
@Anadi
Если ответ Вам помог мой, решением отметье его!

Почему этот код работает только в опере?

Привет знатоки!
Я не особо силен в js и столкнулся с такой проблемой.
var _POS = {};
    'use strict';
    (function () {
        navigator.geolocation.getCurrentPosition(
                function (position) {

                    var lat = position.coords.latitude;
                    var lng = position.coords.longitude;

                    _POS.lat = lat;
                    _POS.lng = lng;
                }
        );
    });

Получаю координаты, записываю их в массив. Далее при загрузке гугл карты подставляю переданные из массива координаты
function init_<? echo $arParams['MAP_ID'] ?>()
    {
        if (!window.google || !window.google.maps)
            return;

        var getLat = _POS.lat;
        var getLng = _POS.lng;

        console.log(_POS.lat);

        var opts = {
            zoom: <? echo $arParams['INIT_MAP_SCALE'] ?>,
            center: new google.maps.LatLng(getLat, getLng),

... ниже код и т.д., что нам надо - это код выше.

По идее все (верно), но почему то код отрабатывает нормально только в опере. В консоль выводит координаты, все как положено, а в остальных браузерах не хочет. Готов выслушать критику, только подскажите куда копать?
  • Вопрос задан
  • 127 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
В верхнем скрипте у вас не вызывается функция. Не знаю что у вас в Opera работает, но точно не верхний скрипт.
Исправить можно так:
'use strict';
var _POS = {};
(function () {
  navigator.geolocation.getCurrentPosition(function (position) {
       var lat = position.coords.latitude;
       var lng = position.coords.longitude;

       _POS.lat = lat;
       _POS.lng = lng;
    });
}()); // <== тут добавлен вызов функции


Данные по позиции получаются асинхронно, это надо учитывать. То есть если у вас код использует данные не дождавшись их получения, его надо переписать.

(function () {
  navigator.geolocation.getCurrentPosition(function (position) {
      /* 
       *    инициализировать модули и функции использующие
       *    данные подученные от навигатора надо тут
       *    
       */      
    });
}());
Ответ написан
@levchak0910
answer.correct ? press({correct: true}) : next()
Cкорее всего, у Вас в опере разрешена геолокация, а в других браузерах нет. Проверьте в настройках.
navigator.geolocation.getCurrentPosition(
    function(position) {
        // success function
    },
    function(error) {
        // error function
        // Посмотреть какая ошибка
        console.log(error);
    });

Я запретил выявления геолокации и возникает такая ошибка: PositionError("User denied Geolocation")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы