Safari 5中的地理位置

时间:2010-09-24 22:22:00

标签: html5 safari geolocation

我有一个使用HTML5地理位置报告我的位置的应用程序。该应用程序在Firefox和Chrome上运行正常,但在Safari 5上,它表示Safari不支持Geolocation。

根据我的阅读,Safari 5确实支持Geolocation。我错过了什么?

感谢您的时间。

苏尼

5 个答案:

答案 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)

嗯,我有点难过。 Safari 5支持通过HTML 5进行地理定位。您可能希望尝试使用像Modernizr这样的HTML 5功能检测服务。这将告诉您哪些浏览器支持html5和css3标准。我正在使用Safari 5,而且Modernizr显示支持地理定位API。

答案 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在那里停留几分钟。