HTML5 GeoLocation API - никакой обратный вызов не вызывается - PullRequest
1 голос
/ 19 января 2012

У меня есть фрагмент кода, который проверяет наличие GeoLocation API.Если это доступно, я пытаюсь получить текущую позицию.Но в зависимости от браузера код работает по-разному:

  • в IE, successCallback вызывается с каждым F5 refres
  • в FF, я получаю successCallback или errorCallback с кодом ошибки = 2 (POSITION_UNAVAILABLE)
  • в Chrome я получаю успешный ответ или ... ничего.Я жду и жду, и ничего ...

На самом деле мне нужно, чтобы successCallback вызывался каким-то непротиворечивым образом ... Есть ли изменения для его достижения?

Фрагмент кода:

function successCallback(position) {
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
    alert("Your location is: " + latitude + "," + longitude);
}

function errorCallback(error) {
    console.log(error);
}

if (Modernizr.geolocation) {
    navigator.geolocation.getCurrentPosition(successCallback, errorCallback, { maximumAge: 0 });
    alert("geolocation is enabled");
} else {
    alert("geolocation is NOT enabled");
}

Краткое примечание 1:

alert("geolocation is enabled");

вызывается каждый раз.

Краткое примечание 2:

настройка:

maximumAge: 1

работает лучше.Теперь Chrome и IE каждый раз вызывают successCallback.Меня пугает только FF, он случайно вызывает callback.

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Не так много вы можете сделать с этим. Вы находитесь в прихоти разработчиков браузеров и того, как они пытаются выяснить ваше местоположение на основе отпечатков пальцев WiFi Access Point или IP-поиска.

Из любопытства я протестировал код (http://jsfiddle.net/YbtSZ/2/) в следующих браузерах и обнаружил, что он работает некорректно.

Mac 10.7.2

  • Chrome на Mac - работает
  • FF 9 на Mac - работает
  • Safari на Mac - НЕ работает

XP нативный

  • FF 9 на XP - работает
  • IE 8 на XP - НЕ работает (геолокация НЕ поддерживается)

XP работает виртуально на Mac

  • Chrome на XP (виртуализирован в Mac) - НЕ работает (ПОЛОЖЕНИЕ НЕДОСТУПНО)
  • FF 9 в XP (виртуализирован в Mac) - НЕ работает (POSITION_UNAVAILABLE)
  • IE 8 в XP (виртуализирован в Mac) - НЕ работает (геолокация НЕ поддерживается)
0 голосов
/ 19 января 2012

Возможно, вы захотите попробовать Modernizr , это библиотека JavaScript, которая абстрагирует возможности HTML5, чтобы вы получали согласованные результаты. Проверьте документы для получения дополнительной информации.

...