【发布时间】:2020-02-01 00:22:15
【问题描述】:
编辑:此问题的症状不一致。今天我又试了一次,突然它起作用了……有时。如果我一遍又一遍地刷新它大约有一半的时间起作用。如果它在 iframe 中运行,则 iframe 需要允许同源和允许脚本。我真的不能确定这一切,因为它是如此不一致。最终我决定使用基于 IP 的地理定位,只是为了避免头痛。
如果有人可以复制这个问题,请在 cmets 中告诉我。 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、edge beta(基本上是 chrome)和 android 上的 chrome 上,此代码将成功并将您的设备纬度打印到页面。 在 Safari、iOS 版 Safari 和 IE11 上,这将失败并显示消息“此站点无权使用 Geolocation API”。
我认为这不是指用户授予访问位置数据的权限,但我还是检查了这一点。似乎并非如此,因为它在一个浏览器中运行,但在同一设备上却不是另一个浏览器。在我的示例中,它适用于 chrome,但不适用于同一台 Windows 10 计算机上的 ie11。我也让一位同事确认了同样的事情,它可以在 chrome 上运行,但在他的 mac 上不能运行 safari。
这让我认为这是一个域问题,但为什么它可以在一个浏览器中运行,而不是在另一个浏览器中运行?经过大量谷歌搜索后,我能找到的最佳答案是这是一个 SSL 问题,但如果你转到 https://developers.google.com/maps/documentation/javascript/geolocation,你会发现即使 google.com 也面临同样的问题。所以我认为这排除了这一点。你甚至可以在 w3schools 自己的网站上试用它https://www.w3schools.com/html/html5_geolocation.asp
这里谷歌当然没有输入,因为navigator是html5的产物
【问题讨论】: