Rails 5:通过与http:// localhost:3000的不安全连接阻止了对地理定位的访问

时间:2017-09-21 08:45:25

标签: javascript ruby-on-rails ruby ruby-on-rails-4 safari

我正在为我的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>

1 个答案:

答案 0 :(得分:10)

Safari(与Chrome和Firefox不同)不允许通过HTTP协议访问地理位置 - 仅限HTTPS。即使是localhost。非常感谢Apple。

解决方案是在开发中使用其他浏览器或通过HTTPS提供Rails。您可以通过生成自签名证书并设置Rails开发服务器(Webrick或Puma)来通过HTTPS提供服务。

Rails 5默认为Puma,而早期版本使用Webrick。

具体方法因您的操作系统和正在使用的服务器而异。