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

Dev*_*Dev 7 javascript ruby safari ruby-on-rails ruby-on-rails-4

我使用的是HTML5的地理位置为我的Rails应用程序,但是当我点击try it按钮,里面出现以下错误safari browser consoleshow web inspector console:

getLocation — localhost:83[blocked] Access to geolocation was blocked over insecure connection to http://localhost:3000.
Run Code Online (Sandbox Code Playgroud)

这是代码:

<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>
Run Code Online (Sandbox Code Playgroud)

max*_*max 15

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

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

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

确切的方法取决于您的操作系统和正在使用的服务器.

  • OMG noob 苹果开发人员。本地主机永远不应该需要 https 因为它是本地的 (2认同)