【问题标题】:html5 geolocation not working on safari browserhtml5 地理定位在 Safari 浏览器上不起作用
【发布时间】:2016-01-02 01:58:57
【问题描述】:

处理 html5 地理定位。

在 mozilla、chrome、IE 上试过。在他们身上工作得很好,但对野生动物园不起作用。在 mac 上测试 safari(8.0.5),在 windows 上测试 safari(5.1)

只需点击网址

http://www.w3schools.com/html/html5_geolocation.asp

http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation

  <!DOCTYPE html>
<html>
<body>

<p>Click the button to get your coordinates.</p>

<button onclick="getLocation()">Try It</button>

<p id="demo"></p>

<script>
var x = document.getElementById("demo");

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}

function showPosition(position) {
    x.innerHTML = "Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude;  
}
</script>

</body>
</html>

它提供弹出窗口允许/禁止,但在允许后什么也不做。 我已经在连接了 Wi-Fi 的 Mac 上测试了 Safari,但也不适用于连接 Wi-Fi 和 LAN 的笔记本电脑。

【问题讨论】:

  • 如果可能的话,您是否可以考虑通过将您正在测试的机器从其他地方的另一个网络通过 wifi 进行尝试来解决此问题?例如,如果可以的话,从公共 wifi 热点尝试一下。
  • 不幸的是,当 Safari 执行此操作时,似乎没有有用的方法来以编程方式获取有关失败原因的信息(例如,如果由于机器使用以太网而导致失败)连接,Safari 不会以任何你能得到的方式暴露该细节)。但在这种情况下,您应该尝试使用 Geolocation API 的其他 Web 应用程序(例如,Web 教程站点中的演示应用程序),看看它们是否在您的环境中的 Safari 中也失败(几乎肯定会失败)。在这种情况下,您无法修复它。
  • @sideshowbarker 感谢您的建议 :),我已经在连接了 wi-fi 的 Mac 上测试了 safari,它在那里工作,但不适用于 wi-fi 和 LAN 上的笔记本电脑。
  • 好的,看来您肯定遇到了stackoverflow.com/questions/3791442/geolocation-in-safari-5 中记录的已知问题,即 Safari 中的地理定位无法在具有有线/以太网连接的机器上工作,并且有没有针对该问题的修复或解决方法。
  • @sideshowbarker windows 有问题吗?我的意思是它可以在 Mac 上运行,但不能在与相同 Wi-Fi 连接的 Windows 上运行

标签: javascript html windows safari geolocation


【解决方案1】:

JavaScript 地理定位没有要求用户在 iOS 和桌面 Safari 上共享位置。事实证明,Safari 共享位置的站点需要 HTTPS 和错误处理。一旦我添加了 SSL 证书,它就可以工作了!

【讨论】:

    【解决方案2】:

    不幸的是,Apple 不通过 HTTP 连接提供地理位置数据。您需要 HTTPS 才能访问 Safari 上的客户端地理位置。

    【讨论】:

    • 这个答案部分正确。请参阅上面关于 LAN 与 WiFi 的答案......我通过 HTTPS 对其进行了测试,这绝对是问题所在。
    【解决方案3】:

    根据问题中的例子,下面是一个完整的工作sn-p:

    <p id=demo>
    <script>
    var x = document.getElementById("demo");
    function getLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        } else {
            x.innerHTML = "Geolocation is not supported by this browser.";
        }
    }
    function showPosition(position) {
        x.innerHTML = "Latitude: " + position.coords.latitude +
        "<br>Longitude: " + position.coords.longitude;
    }
    getLocation()
    </script>
    

    我在我的环境中的 Safari 中对其进行了测试,它按预期工作。问题中的实际示例不完整,因此它永远不会按原样执行任何操作。因此,如果不查看完整代码,就很难知道 Mozilla、Chrome 和 IE 中的工作原理。

    如果上述 sn-p 在您的 Safari 中仍然无法为您工作,请打开 Safari 的 Web Inspector(例如,从 Develop 菜单或右键单击页面并选择Inspect Element),然后转到 Console 选项卡并检查记录了哪些错误。

    目前,就代码sn-p而言,完全清楚,一些基本的注意点:

    • 脚本必须实际调用getLocation() 函数(不仅仅是定义它)
    • 文档实际上必须有一个id=demo 元素
    • 脚本应该放在id=demo 元素之后(如果你把对getLocation() 的调用放在文档的head 中,它是行不通的,因为它会在@ 之前运行DOM 中存在 987654330@ 元素)

    另外,一般注意事项:切勿将 w3schools.com 用于任何事情。它很草率,非常不可靠,而且维护得很差。而是使用MDN。比如MDN有一个很好的Using geolocation页面,有complete code for a good live example

    【讨论】:

    • 感谢您的回复@sideshowbarker 我已经更新了代码并检查了 Mac 和 Windows 上 Safari 上的 MDN 示例,但给出了“无法检索您的位置”消息。请帮忙。
    【解决方案4】:

    您是否通过 wi-fi 或有线网络连接?

    当您没有连接到 Wi-Fi 时,Safari 似乎有问题。

    来源

    Geolocation not workin on Safari 5.x on Windows 7/XP

    Geolocation in Safari 5

    【讨论】:

    • @ParanOa 尝试了两者,但遇到了同样的问题。
    • @Kamini 您确定您在启用 wifi 的 Safari 中进行了测试吗?拔下以太网电缆?因为此处引用的其他 StackOverlfow 答案表明其他人遇到了与您报告的完全相同的问题,但仅当他们使用“有线”(以太网)连接时(在这种情况下,Safari 有时或总是只是返回错误而不是尝试确定位置)。
    • @ParanOa 嗨,它适用于--> 带有 wi-fi 的 MAC 上的 safari 但不适用于--> 带有 wi-fi 的 Windows 上的 safari。
    • help.tunnelbear.com/customer/portal/articles/… 请查看此网站。看看你是否在同一 wifi 上连接了 mac 和 windows 获取 sama 数据。
    • @Paran0a 链接 bearsmyip.com 显示 Windows 上的位置,但 w3schools.com/html/… 此链接不起作用。可能是什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多