Геолокация в Сафари 5 - PullRequest
       44

Геолокация в Сафари 5

12 голосов
/ 25 сентября 2010

У меня есть приложение, которое сообщает о моем местоположении с помощью геолокации HTML5.Приложение работает корректно на Firefox и Chrome, но в Safari 5 говорится, что Safari не поддерживает геолокацию.

Из того, что я прочитал, Safari 5 поддерживает геолокацию.Чего мне не хватает?

Спасибо за ваше время.

Сунил

Ответы [ 5 ]

19 голосов
/ 28 июля 2011

Похоже, геолокация Safari работает только при подключении к Wi-Fi. При подключении через проводное соединение Safari вызывает функцию обратного вызова с ошибкой из функций геолокации.

Чтобы проверить это, попробуйте это в веб-консоли:

navigator.geolocation.getCurrentPosition(
  function(){console.log("success")},
  function(){console.log("error")}
);

В Safari / Wi-Fi это возвращает «успех» через секунду или две, но при проводном соединении немедленно возвращает «ошибку».

(с использованием Safari 5.1 - 8.x / Mac OSX 10.7 - 10.10)

3 голосов
/ 25 сентября 2010

Хотя номинально поддержка геолокации в Safari 5 доступна как для Mac, так и для Windows, я слышу о других проблемах на стороне Windows.

Например, посмотрите этот похожий вопрос StackOverflow . В этом случае, однако, navigator.geolocation был доступен, он просто не получил успешный обратный вызов. Когда вы говорите, что «он говорит, что Safari не поддерживает геолокацию», кто вам это говорит? Вы получаете сообщение об ошибке с ошибкой, navigator.geolocation null, или вы только что прочитали это в другом месте (и если да, то где?)?

2 голосов
/ 21 февраля 2012

Как вы получаете скрипт Google Maps API?Датчик имеет значение true или false?У меня Safari Geolocation не работал (под Windows), пока я не изменил «sensor = false» на «sensor = true», как в примере ниже:

<script src="http://maps.googleapis.com/maps/api/js?sensor=true" type="text/javascript"></script>

И он отлично работает в любом браузере: IE9, Chrome,FF10 +, Safari (Win).

Заметил еще одну странную вещь - он работает только с Wi-Fi в Safari - если вы подключены по проводному соединению, он не будет работать и просто застрянет, пытаясь навсегда.

Итак, чтобы исправить Safari, просто добавьте следующее { maximumAge: 600000, timeout: 10000 } для обработки тайм-аута:

// Try W3C Geolocation (Preferred)
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        handleGeolocationAcquired(position.coords.latitude, position.coords.longitude);
    }, function(error) {
        handleNoGeolocation();
    },
        { maximumAge: 600000, timeout: 10000 });

    // Try Google Gears Geolocation
} else if (google.gears) {
    var geo = google.gears.factory.create('beta.geolocation');
    geo.getCurrentPosition(function (position) {
        handleGeolocationAcquired(position.latitude, position.longitude);
    }, function () {
        handleNoGeolocation();
    });
}
//Cannot obtain Geo Location
else {
    handleNoGeolocation();
}

Таким образом, если вы находитесь в Safari (под Windows) и подключены к проводному (=> бесконечный цикл, получающий географическое местоположение): через 10 секунд он возвращается к обработчику ошибок.Кстати - MaximumAge Параметр просто устанавливает срок действия местоположения.

2 голосов
/ 25 сентября 2010

хммм, я немного озадачен. Safari 5 поддерживает геолокацию через HTML 5. Возможно, вы захотите использовать службу обнаружения функций HTML 5, например Modernizr . Это скажет вам, какие браузеры поддерживают стандарты html5 и css3. Я использую Safari 5, и Modernizr показывает, что поддерживается API геолокации.

1 голос
/ 30 апреля 2011

Вызов getCurrentPosition(...) без указания тайм-аута заставляет Safari оставаться там на несколько минут.

...