【问题标题】:Geolocation in Safari 5Safari 5 中的地理位置
【发布时间】:2011-04-17 00:39:22
【问题描述】:

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

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

感谢您的宝贵时间。

苏尼尔

【问题讨论】:

  • 所以这个问题差不多 6 年都没有解决?
  • 遇到同样的问题,原来我必须在 Mac 的系统偏好设置中启用定位服务。

标签: html safari geolocation


【解决方案1】:

看起来 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)

【讨论】:

  • 谢谢安迪。我在 Wi-Fi 上尝试过,地理位置在 Safari 上运行良好。
  • 这里可能会发生更多事情。昨天就是这种情况,但今天我的有线连接“成功”了。我只记得安装了开发者工具。
  • 这里肯定发生了什么事。使用 Safari 5.1(以前版本也发生过),有时 Geolocation 工作,有时根本不工作。通常会出现超时错误。我的系统完全没有变化。但我不知道问题可能是什么。所有其他浏览器似乎都可以完美运行。
  • 有没有其他人注意到 @andyvanee 的开发者工具问题?
【解决方案2】:

虽然 Safari 5 中的nominally 地理定位支持在 Mac 和 Windows 上都可用,但我听说 Windows 方面存在更多问题。

例如,看到这个类似的StackOverflow question。但是,在这种情况下,navigator.geolocation 是可用的,它只是从未收到成功的回调。当你说“它说 Safari 不支持地理定位”时,谁在对你说?您是否收到错误回调,navigator.geolocation 为 null,还是您刚刚在其他地方阅读过此内容(如果有,在哪里?)?

【讨论】:

  • 可能是用户禁用了地理定位功能。
  • 是的,这是一种可能性,在这种情况下,我认为navigator.geolocation 应该为空。
  • 我有一个 javascript 警报设置,用于定位不可用的情况。 Chrome 和 Firefox 不会触发此警报。只有 Safari 5 可以。
  • @Sunil 这可能表明定位服务已禁用:您可以检查您的 Safari 设置吗? (在 Mac 上,Safari > Preferences > Security > Location services;在 Windows 上应该类似。)Firefox 和 Chrome 在同一台机器上返回正确的位置?
  • @SunilShenoy 他们修复了吗?显然不是 - Safari 和 iOS 不适合我..
【解决方案3】:

如何获取 Google Maps API 脚本?传感器参数设置为 true 还是 false ? 在我将“sensor=false”更改为“sensor=true”之前,Safari Geolocation 无法正常工作(在 Windows 下),如下例所示:

<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 下)和有线连接(=> 无限循环获取地理位置):10 秒后,它将回退到错误处理程序。
BTW - ma​​ximumAge 参数只是设置位置过期时间。

【讨论】:

  • 不适合我。我正在使用 async 和 defer 来加载脚本(我还需要 autosuggest 和其他 api..)和 Safari no-go ...
【解决方案4】:

嗯,我有点难过。 Safari 5 确实支持通过 HTML 5 进行地理定位。您可能想尝试使用 HTML 5 特征检测服务,例如 Modernizr。这将告诉您哪些浏览器支持 html5 和 css3 标准。我正在使用 Safari 5,Modernizr 显示支持地理定位 API。

【讨论】:

  • Geolocation API 受支持,但不适用于 Safari。
【解决方案5】:

在没有指定超时的情况下调用 getCurrentPosition(...) 会使 Safari 卡在那里几分钟。

【讨论】:

  • 即使在给定超时的情况下也不起作用(仅限 safari)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多