Поставщик геолокации для 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);