Подтвердить что ты не робот

Геолокация в Safari 5

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

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

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

Сунил

4b9b3361

Ответ 1

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

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

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

С Safari/wifi это возвращает "успех" через секунду или два, но при проводном соединении он немедленно возвращает "ошибку".

(используя Safari 5.1 - 8.x/Mac OSX 10.7 - 10.10)

Ответ 2

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

Например, см. этот похожий вопрос fooobar.com/questions/467557/.... В этом случае, однако, navigator.geolocation был доступен, он просто никогда не получал успешный обратный вызов. Когда вы говорите, что "это говорит о том, что Safari не поддерживает Geolocation", кто говорит это вам? Вы получаете обратный вызов ошибки, navigator.geolocation null, или вы только что прочитали это в другом месте (и если да, где?)?

Ответ 3

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

Ответ 4

Как вы получаете API Карт Google script? Установлен ли параметр датчика 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).

Заметила еще одну странную вещь - она ​​работает только с WiFi в 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) и подключены к проводному (= > бесконечному циклу, в котором находится Geo): через 10 секунд он будет возвращаться к обработчику ошибок.
BTW - maximumAge Параметр просто устанавливает время истечения срока действия.

Ответ 5

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