Поставщик геолокации для Firefox, который позволяет вводить вручную - PullRequest
17 голосов
/ 26 ноября 2009

Существуют ли простые способы переопределить поведение по умолчанию для геолокации api и просто жестко кодировать ваше текущее местоположение?

Я думаю, что это было бы полезно для тестирования и в целях конфиденциальности (предоставление поддельных данных о местоположении)

Я думал, что есть дополнение для этого, но я не могу найти его. Похоже, что единственный вариант сейчас - это изменить about: config geo.wifi.url на какой-то альтернативный веб-сервис, который я считаю слишком сложным.

Есть идеи?

Спасибо

Идеальный сценарий

Кто-то реализует надстройку, где появляется карта Google, и я могу выбрать новое местоположение по умолчанию.

Ответы [ 7 ]

13 голосов
/ 13 апреля 2011

Самый простой способ - перейти к about:config, а затем в поле фильтра введите geo.wifi.uri, дважды щелкните единственную строку конфигурации, которая отображается, и введите значение ниже после замены xxx и yyy с координатами, которые вы получаете от услуги, как http://www.getlatlon.com/:

data:application/json,{"location":{"latitude":xxx,"longitude":yyy,"accuracy":10}}

Этот трюк не требует никаких надстроек или локальных / размещенных файлов. Убедитесь, что значение без пробелов и в одной строке!

12 голосов
/ 16 декабря 2009

Geo.wifi.uri не обязательно должен быть веб-сервисом. Вы также можете установить его в локальный URI с помощью файла: //...

Файл должен быть json-файлом с таким содержимым:

{"location": {
              "latitude": 48.777025000000002, 
              "longitude": 9.1713909999999998, 
              "accuracy": 10.0}}

Обновление: Для Firefox 9+ формат изменился:

{
    "status": "OK",
    "accuracy": 10.0,
    "location": {"lat": 48.777, "lng": 9.171}
}

Или вы можете объединить их для поддержки обоих:

{
    "status": "OK",
    "accuracy": 10.0,
    "location": {
        "lat": 48.777,
        "lng": 9.171,
        "latitude": 48.777,
        "longitude": 9.171,
        "accuracy": 10.0
    }
}

Обновление: похоже, что установка этого параметра вручную заблокирована поставщиком, использующим службу Google. См Ошибка 716453 Обновление 2: geo.wifi.uri not geo.wifi.url

5 голосов
/ 24 марта 2010

Geolocater - экспериментальное дополнение, позволяющее редактировать геолокацию.

1 голос
/ 08 января 2012

В Chrome вы можете использовать расширение Ручная геолокация chrome. Это позволит вам графически выбрать ваше местоположение вручную.

0 голосов
/ 06 мая 2016

Я создал простое веб-приложение, которое служит конечной точкой геолокации, на которую вы можете указать geo.wifi.uri браузера. Он совместим со спецификацией Google API. Чтобы использовать его, просто введите следующее, заменив [широта] и [долгота] на нужные значения:

http://geolocation-mocker.phitherek.me/geolocate/[latitude]/[longitude]

и это должно работать. Чтобы проверить, работает ли служба, перейдите к

http://geolocation -mocker.phitherek.me

и проверьте, правильно ли отображается страница HTML. Вы можете найти исходный код этого простого приложения на

https://github.com/Phitherek/geolocation-mocker

Надеюсь, этот инструмент окажется полезным.

0 голосов
/ 30 ноября 2010

Я подключил Google Локатор к геолокации Firefox. Это позволяет вручную обновлять ваше местоположение в Google Локаторе одним щелчком мыши, вместо того, чтобы самостоятельно искать широту и долготу и вводить его в локальный файл. Моя статья на эту тему: Заставьте Firefox взять геолокацию из Google Локатора .

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

Cheers, MetaEd

0 голосов
/ 26 ноября 2009

Хммм, вы не можете смоделировать navigator.geolocation напрямую - возможно, вы можете реорганизовать свой код, который использует его для использования другого объекта - скажем, customGeoLocation.

В производстве вы можете просто установить customGeoLocation на navigator.geolocation, а в тестах использовать фиктивную реализацию любой используемой вами функциональности.

EDIT: Оказывается, вы можете заменить функции на navigator.geolocation объекте, но это все еще бесполезно, если вы используете фиктивную библиотеку (например, JsMock), которая должна создать фиктивный объект. Таким образом, вы не сможете заменить navigator.geolocation макетом.

Вы можете сами издеваться так:

var getCurrentPositionCalled = false;
navigator.geolocation.getCurrentPosition = function() { 
  getCurrentPositionCalled = true; 
};

//Your app code here
//...
assert(getCurrentPositionCalled);
...