Ну, с одной стороны, если Вы ВОЗВРАТИТЕСЬ в своем блоке попытки, то наконец будет все еще работать, но код упомянул ниже try-catch-finally блок, не будет.
geo.wifi.uri не обязательно должен быть веб-сервисом. Вы также можете установить его в локальный uri с помощью file://...
Файл должен быть 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
. Хммм, вы не можете имитировать 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);
Geolocater - экспериментальное дополнение, позволяющее редактировать геолокацию.