我正在为我的rails应用程序使用html5地理位置,但是当我点击try it
按钮时,safari browser console
下的show web inspector console
内会出现以下错误:
getLocation — localhost:83[blocked] Access to geolocation was blocked over insecure connection to http://localhost:3000.
这是代码:
<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>
答案 0 :(得分:10)
Safari(与Chrome和Firefox不同)不允许通过HTTP协议访问地理位置 - 仅限HTTPS。即使是localhost。非常感谢Apple。
解决方案是在开发中使用其他浏览器或通过HTTPS提供Rails。您可以通过生成自签名证书并设置Rails开发服务器(Webrick或Puma)来通过HTTPS提供服务。
Rails 5默认为Puma,而早期版本使用Webrick。
具体方法因您的操作系统和正在使用的服务器而异。