我有一个使用HTML5地理位置报告我的位置的应用程序。该应用程序在Firefox和Chrome上运行正常,但在Safari 5上,它表示Safari不支持Geolocation。
根据我的阅读,Safari 5确实支持Geolocation。我错过了什么?
感谢您的时间。
苏尼
答案 0 :(得分:19)
看起来Safari地理定位仅在与wifi连接时才有效。当使用有线连接连接时,Safari会从地理定位函数调用错误回调。
要测试此功能,请在Web控制台中尝试:
navigator.geolocation.getCurrentPosition(
function(){console.log("success")},
function(){console.log("error")}
);
使用Safari / wifi,这会在一两秒后返回“成功”,但在有线连接上,它会立即返回“错误”。
(使用Safari 5.1 - 8.x / Mac OSX 10.7 - 10.10)
答案 1 :(得分:3)
虽然Mac 5和Windows上都提供了Safari 5中的nominally地理位置支持,但我听到Windows上存在更多问题。
例如,请参阅此类StackOverflow question。但是,在这种情况下,navigator.geolocation
可用,它从未收到过成功的回调。当你说“它说Safari不支持Geolocation”时,谁对你这么说?你得到一个错误回调,是navigator.geolocation
null,还是你刚刚在其他地方读过这个(如果有的话,在哪里?)?
答案 2 :(得分:2)
答案 3 :(得分:2)
如何获取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)。
注意到另一个奇怪的事情 - 它只适用于Safari中的WiFi - 如果你有线连接,它将无法正常工作,只会永远陷入困境。
因此,要修复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 参数只设置位置到期。
答案 4 :(得分:1)
在没有指定超时的情况下调用getCurrentPosition(...)
会使Safari在那里停留几分钟。