html5 getCurrentPosition 在 safari、safari for ios 或 IE11 中不起作



编辑:此问题的症状不一致。今天我又试了一次,突然它起作用了......有时。如果我一遍又一遍地刷新,它大约一半的时间都在工作。如果它在 iframe 中运行,则 iframe 需要允许同源脚本和允许脚本。我真的不能确定这些,因为它是如此不一致。最终,我决定采用基于IP的地理位置,以避免头痛。

如果有人可以复制此问题,请在评论中告诉我。 TLDR:此链接将在 safari 和 ie11 中显示错误,但不显示 chrome。

有问题的代码:

<!DOCTYPE html>
<html>
<head>
<script>  
navigator.geolocation.getCurrentPosition(function(position){
document.body.innerHTML = position.coords.latitude;
}, function(error){
document.body.innerHTML = error.message;
});
</script>
</head>
<body>
</body>
</html>

问题:在 chrome、边缘测试版(所以基本上是 chrome(和 android 上的 chrome 上,此代码将成功并将您的设备打印到页面。 在 Safari、iOS 版 safari 和 IE11 上,此操作将失败,并显示消息"此站点无权使用地理位置 API"。

我假设它不是指用户授予访问位置数据的权限,但我还是检查了这一点。情况似乎并非如此,因为它在一个浏览器中工作,但在同一设备上不能在另一个浏览器中工作。在我的示例中,它适用于 chrome,但不适用于同一台 windows 11 计算机上的 ie10。我也有一个同事确认了同样的事情,它可以在 chrome 中工作,但不能在他的 Mac 上运行。

这让我认为这是一个域问题,但为什么它会在一个浏览器中而不是另一个浏览器中工作?经过大量的谷歌搜索,我能找到的最佳答案是这是一个SSL问题,但如果你去 https://developers.google.com/maps/documentation/javascript/geolocation 你可以看到即使是 google.com 也面临着同样的问题。所以我认为这排除了这一点。您甚至可以在W3Schools自己的网站上尝试 https://www.w3schools.com/html/html5_geolocation.asp

谷歌当然没有输入,因为导航器是html5的产物

我无法在IE 11中重现该问题。我在IE 11中测试了Google和w3schools链接,他们要求获取位置的权限,如果我允许,可以显示位置。我还尝试了您提供的代码片段,它会输出 IE 11 和 Chrome 中的位置。

您是否在IE 11中取消选中了"从不允许网站请求您的物理位置"框?此外,我还发现了一个类似的线程,您也可以参考其中的解决方案。

在您的帖子中,您似乎找到了解决方案。我建议你也可以把你的解决方案作为一个答案,把最好的答案作为一个公认的答案。它可以在未来帮助其他社区成员解决类似的问题。

最新更新