- Не определяет текущее местоположение
- Navigator.geolocation.getCurrentPosition Обратные вызовы не будут работать в Firefox 10
- Navigator.geolocation.getCurrentPosition не работает на android google chrome
- navigator.geolocation.getCurrentPosition sometimes works sometimes doesn’t
- 25 Answers 25
- JavaScript: как использовать GeolocationAPI
- Получение позиции пользователя
- Наблюдая за изменениями
- Если пользователь отклоняет разрешение
- Добавление дополнительных опций
Не определяет текущее местоположение
Обратился пользователь, не отображается текущее местоположение, причем не работает у него даже в песочнице: https://tech.yandex.ru/ma ps/jsbox/2.1/geolocated_m ap
ymaps.geolocation.get() возвращает Not found, а нативный код navigator.geolocation.get CurrentPosition(function( position)
Находимся с ним в одном офисе в одной подсети. ОС windows 8.1 64bit
// Вернет в лог Not found
Для справки, находимся в городе Иркутск.
Если в консоле ввести:
navigator.geolocation.getCurrentPosition(function(position)
Координаты будут такие:
latitude: 52.290753599999995
longitude: 104.2920718
Если autoReverseGeocode уставновить в false, как получить строку с адресом?
result.geoObjects.get(0).properties.getAll() будет возвращать пустой объект.
Для справки, находимся в городе Иркутск.
Если в консоле ввести:
navigator.geolocation.getCurrentPosition(function(position)
Координаты будут такие:
latitude: 52.290753599999995
longitude: 104.2920718
На не рабочей системе:
accuracy: 30
latitude: 52.2909886
longitude: 104.29793749999999
Разница только в том, что не рабочая система подключена через wifi.
На рабочей системе:
accuracy: 795
latitude: 52.290753599999995
longitude: 104.2920718
На не рабочей системе:
accuracy: 30
latitude: 52.2909886
longitude: 104.29793749999999
Разница только в том, что не рабочая система подключена через wifi.
Да, понял проблему. По Wi-Fi вас геолоцирует точно посреди улицы.
Источник
Navigator.geolocation.getCurrentPosition Обратные вызовы не будут работать в Firefox 10
Хорошо, поэтому я создаю приложение, использующее API геолокации. Кажется, у меня нет очень простой части кода для работы с Firefox 10. Вот код:
Итак, например, в chrome, после запуска страницы мне будет предложено, хочу ли я поделиться своим местоположением, и после нажатия “да” он предупредит меня, что “он работает”. Теперь в Firefox 10 он попросит меня поделиться своим местоположением и после нажатия поделиться им ничего не делает… Я пытался получить обратный вызов для запуска любого типа кода, но не повезло. Это ошибка с Firefox или я что-то не так? У меня есть пример кода для тестирования: http://dev-hub.com/geolocation.html.
Изменить —
Моя ОС – Windows 7 64bit
Хорошо, я обнаружил, что проблема действительно в Firefox и что она не работает надежно или одинаково на всех платформах. Глядя на http://dev.w3.org/geo/api/spec-source.html Я нашел следующий вариант для добавления:
Как вы можете видеть здесь, был добавлен тайм-аут: 5000, что означает, что если по какой-то причине браузер занимает более 5000 мс (5 секунд), то выдаст ошибку тайм-аута (код ошибки 3). Итак, теперь, когда Firefox не работает, он хотя бы запускает обратный вызов ошибки, и я получаю сообщение с предупреждением “Ошибка произошла. Код ошибки: 3”.
По-видимому, значение по умолчанию для тайм-аута бесконечно, поэтому он никогда не выйдет из строя… Chrome на 100% надежный, но Firefox на 10% надежнее на моей машине, что очень неутешительно. На моем другом компьютере, который работает с Windows XP и находится в одной сети, Firefox, кажется, на 100% надежнее.
Источник
Navigator.geolocation.getCurrentPosition не работает на android google chrome
Http://jsfiddle.net/FcRpM/ работает в Google Chrome на моем ноутбуке, но на мобильном телефоне HTC one S (Android 4.1, GPS выключен, через мобильные сети и Wi-Fi включен), подключен к Интернету через WiFi.
- Браузер по умолчанию работает отлично.
- Google Chrome, Opera, Yandex.browser для андроида не работают с «Истекло время ожидания».
Другие приложения для Android определяют меня правильно.
Вы можете попробовать это. Кажется, что работает на моем устройстве (Samsung Galaxy Nexus работает с Chrome 27.0.1453.90 на Wi-Fi (без подключения к данным, без GPS))
Проблема в том, что оповещение принимает только строки (в оригинальной форме), однако вы пропускаете 2 удвоения. Измените окно предупреждения, например, чтобы alert(‘Hey’, ‘Hello’); И выход будет только Hey . Измените значение на + и вы получите конкатенированные строки HeyHello . Вы не можете использовать знак + внутри alert поскольку уравнение будет сначала выполнено, а затем отображено.
Надеюсь, это ясно.
Существует временное действие : для вызова watchPosition и обертывания этого в течение 5 секунд перед очисткой watchID. Код ниже;
Я не играл со значениями «варианты» или с задержкой таймаута на данный момент, но приведенный выше код возвращает точную информацию о местоположении на каждой платформе, которую я пробовал.
Только что закончил тестирование кучи мобильных устройств и Javascript Geolocation. Я использовал код примера из Google, чтобы убедиться, что проблема не в моем собственном коде.
Chrome для Android 4.4, похоже, не работает с службами определения местоположения только с GPS, и браузер 2.3 не работает. Они оба нуждаются в «высокой точности» – использовании беспроводных сетей и сетей 3G / 4G.
Самое забавное, что Firefox для Android работает без каких-либо проблем только с GPS. Только биржевые браузеры Android (Chrome + Mobile Safari) не работают с настройками местоположения только для GPS .
А остальная часть банды – Lumia WP8 с GPS, Windows и Linux (оба с ADSL) отлично работали с любыми настройками местоположения.
После многих часов поиска решения для ошибки3, я могу только перезагрузить свой телефон, и геолокация начинает работать, как обычно. Очень плохо…
Источник
navigator.geolocation.getCurrentPosition sometimes works sometimes doesn’t
So I have a pretty simple bit of JS using the navigator.geolocation.getCurrentPosition jammy.
Basically what’s happening here is we get the current position, if it’s obtained, two «watermarks» are placed in two fields that say «Current Position» and two hidden fields are created with the lat-long data as their value (they’re removed in the beginning so they don’t get duplicated every time). There are also two buttons that have a click function tied to them that do the same thing. Unfortunately, every third time or so, it works. What’s the problem here.
25 Answers 25
I have been having exactly the same problem, and finding almost no information online about it. Nothing at all in the books. Finally I found this sober query on stackoverflow and (ha!) it was the final impetus I needed to set up an account here.
And I have a partial answer, but alas not a complete one.
First of all, realise that the default timeout for getCurrentPosition is infinite(!). That means that your error handler will never be called if getCurrentPosition hangs somewhere on the back end.
To ensure that you get a timeout, add the optional third parameter to your call to getCurrentPosition, for example, if you want the user to wait no more than 10 seconds before giving them a clue what is happening, use:
Secondly, I have experienced quite different reliability in different contexts. Here at home, I get a callback within a second or two, although the accuracy is poor.
At work however, I experience quite bizarre variations in behavior: Geolocation works on some computers all the time (IE excepted, of course), others only work in chrome and safari but not firefox (gecko issue?), others work once, then subsequently fail — and the pattern changes from hour to hour, from day to day. Sometimes you have a ‘lucky’ computer, sometimes not. Perhaps slaughtering goats at full moon would help?
I have not been able to fathom this, but I suspect that the back end infrastructure is more uneven than advertised in the various gung-ho books and websites that are pushing this feature. I really wish that they would be a bit more straight about how flakey this feature is, and how important that timeout setting is, if you want your error handler to work properly.
I have been trying to teach this stuff to students today, and had the embarassing situation where my own computer (on the projector and several large screens) was failing silently, whereas about 80% of the students were getting a result almost instantly (using the exact same wireless network). It’s very difficult to resolve these issues when my students are also making typos and other gaffes, and when my own pc is also failing.
Anyway, I hope this helps some of you guys. Thanks for the sanity check!
Источник
JavaScript: как использовать GeolocationAPI
Используя Geolocation API, мы можем запросить у браузера координаты положения пользователя
Браузер предоставляет объект navigator.geolocation , с помощью которого мы будем выполнять все операции с геолокацией.
Он доступен только на страницах, обслуживаемых по протоколу HTTPS, в целях безопасности и доступен во всех современных браузерах.
Поскольку window это глобальный объект, мы можем получить доступ к navigator без указания window.navigator
Свойство window.navigator разоблачена браузерами указывает на объект Navigator , который является контейнером объект, который делает много веб — платформы API , доступный нам.
Объект geolocation предоставляет следующие методы:
- getCurrentPosition()
- watchPosition()
- clearWatch()
Первый используется для получения координат текущей позиции. Когда мы вызываем этот метод в первый раз, браузер автоматически запрашивает у пользователя разрешение поделиться этой информацией с нами.
Вот как этот интерфейс выглядит в Chrome:
Это необходимо сделать только один раз для каждого источника. Вы можете изменить принятое решение и отменить решение о разрешении. Вот как вы делаете это с Chrome, нажав на значок замка рядом с доменом:
Как только это разрешение будет предоставлено, мы можем продолжить.
Получение позиции пользователя
Давайте начнем с этого примера кода:
Обратите внимание, как я передал пустую стрелочную функцию, потому что getCurrentPosition первым аргументом ожидает функцию обратного вызова.
Эта функция передается объект Position , который содержит фактическое местоположение:
Этот объект имеет 2 свойства:
- coords , объект Coordinates
- timestamp , метка UNIX времени, когда позиция была извлечена
Объект Coordinates поставляется с несколькими свойствами , которые определяют местоположение:
- accuracy точность измеренного положения, выраженная в метрах
- altitude измеренное значение высоты
- altitudeAccuracy точность измеренной высоты, выраженная в метрах
- heading направление, в котором движется устройство. Выражается в градусах (0 = север, восток = 90, юг = 180, запад = 270)
- latitude измеренное значение широты
- longitude измеренное значение долготы
- speed скорость, с которой движется устройство, выраженная в метрах в секунду
В зависимости от реализации и устройства, некоторые из них будут null . Например, на Chrome, работающем на моем MacBook Air, я получил только значения accuracy , latitude и longitude .
Наблюдая за изменениями
В дополнение к получению пользовательской позиции один раз, которую вы можете получить используя getCurrentPosition() , вы можете использовать метод watchPosition() для регистрации функции обратного вызова, которая будет вызываться при каждом изменении, которое устройство сообщит нам.
Конечно, браузер будет запрашивать разрешение также с этим методом, если оно еще не было предоставлено.
Мы можем перестать наблюдать за позицией, вызвав метод navigator.geolocation.clearWatch() и передав ему id возвращаемый watchPosition() :
Если пользователь отклоняет разрешение
Помните всплывающее окно разрешений, которое браузер показывает, когда мы вызываем один из методов, чтобы получить позицию?
Если пользователь отклоняет его, мы можем перехватить этот сценарий, добавив функцию обработки ошибок, как второй параметр методов getCurrentPosition() и watchPosition() .
Объект, передаваемый второму параметру, содержит свойство code , позволяющее различать типы ошибок:
- 1 означает отказано в разрешении
- 2 означает, что позиция недоступна
- 3 откланено по тайм-ауту
Добавление дополнительных опций
Когда я говорил об ошибках ранее, я упоминал об ошибке тайм-аута. Поиск позиции может занять некоторое время, и мы можем установить максимальное время, необходимое для выполнения операции, в качестве передаваемого параметра.
Вы можете добавить тайм-аут, добавив третий параметр в методы getCurrentPosition() и watchPosition() .
Внутри этого объекта мы можем передать свойства
- timeout установить количество миллисекунд до ошибки запроса
- maximumAge установить максимальный «возраст» позиции, кешируемой браузером.
- enableHighAccuracy логическое значение по умолчанию false , требуется позиция с максимально возможным уровнем точности (что может занять больше времени и больше мощности)
Источник