Поставщик геолокации для Firefox, который позволяет вводить вручную

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

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

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

Есть идеи?

Спасибо

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

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

7 ответов

Решение

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, а не geo.wifi.url

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

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

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

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

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

Я создал простое веб-приложение, которое служит конечной точкой геолокации, на которую вы можете указать 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

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

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

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

Ура, MetaEd

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

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

РЕДАКТИРОВАТЬ: Оказывается, вы можете заменить функции на navigator.geolocation объект, но это все еще бесполезно, если вы используете фиктивную библиотеку (например, JsMock), которая должна создать фиктивный объект. Таким образом, вы не сможете заменить navigator.geolocation с насмешкой.

Вы можете сделать насмешку таким образом:

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

//Your app code here
//...
assert(getCurrentPositionCalled);
Другие вопросы по тегам