Геолокация в Safari 5
У меня есть приложение, которое сообщает мое местоположение с использованием геолокации HTML5. Приложение работает правильно в Firefox и Chrome, но в Safari 5 говорится, что Safari не поддерживает Geolocation.
Из того, что я прочитал, Safari 5 поддерживает Geolocation. Что мне не хватает?
Спасибо за ваше время.
Сунил
Ответы
Ответ 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 застрявшим там в течение нескольких минут.