【问题标题】:HTML 5 Geo Location Prompt in ChromeChrome 中的 HTML5 地理位置提示
【发布时间】:2011-07-22 09:21:32
【问题描述】:

刚开始接触 HTML 5 并测试地理位置...到目前为止喜欢它。不过,我遇到了一点减速……当我尝试获取我的地理位置时,chrome 会自动阻止页面获取我的位置。这不会发生在其他站点,例如以下站点:

http://html5demos.com/geo

我正在使用的脚本:

<script type="text/javascript" JavaScript" SRC="geo.js"></script>   
<script type="text/javascript" JavaScript" SRC="Utility.js"></script> 
<script type="text/javascript" JavaScript" SRC="jquery.js"></script> 
<script type="text/javascript" JavaScript" SRC="modernizr.js"></script>  

function get_location() {

        if (geo_position_js.init()) {
            geo_position_js.getCurrentPosition(show_map, handle_error);
        }

    }
    function show_map(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;

        alert("lat:" + latitude + " long:" + longitude);


    }
    function handle_error(err) {
        alert(err.code);
        if (err.code == 1) {
            // user said no!
        }
    }

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(show_map, handle_error);
    } else {
        error('not supported');
    }

我正在从我机器上的本地目录中对此进行测试,因此实际上并没有像“http://whatever.com/mytestpage.html”这样的“域”。这就是我没有收到提示的原因吗?如果是这样,是否可以强制浏览器请求获取用户地理位置的权限,在我的场景中是否有可能?

【问题讨论】:

标签: html google-chrome geolocation file-uri


【解决方案1】:

Chrome 中存在某种安全限制,用于使用来自file:/// URI 的地理定位,但不幸的是,它似乎没有记录任何错误来表明这一点。它将在本地 Web 服务器上运行。如果您安装了 python,请尝试在测试文件所在的目录中打开命令提示符并发出命令:

python -m SimpleHTTPServer

它应该在端口 8000 上启动一个 Web 服务器(可能是别的东西,但它会在控制台中告诉你它正在侦听的端口),然后浏览到 http://localhost:8000/mytestpage.html

如果您没有 python,则 Ruby 中有等效模块,或者 Visual Web Developer Express 带有内置的本地 Web 服务器。

【讨论】:

  • python -m http.server 用于 python 3.x
  • 遇到了同样的问题并将文件放入我的本地 php 服务器(xampp htdocs 目录)。我假设如果您想在开发中的前端应用程序中使用地理定位,您不能只从桌面运行它,它必须在服务器端。我想知道为什么 google 决定将这个限制添加到 Chrome。
  • php -S localhost:8080 php -S : 使用内置网络服务器运行。
  • node app.js 在端口 9615 上运行简单的 Node.js 内容服务器 stackoverflow.com/questions/6084360/…
  • file:// URI 有什么解决办法吗??
【解决方案2】:

【讨论】:

  • 这个答案与具体问题无关,因为 Chrome always 会阻止 file://
  • 不幸的是,链接的文章现在已经过时了。
【解决方案3】:

为了一个简单的解决方法,只需将 HTML 文件复制到某个云共享,例如 Dropbox,然后在浏览器中使用共享链接。简单。

【讨论】:

    【解决方案4】:

    如果您在服务器后面托管,但仍然遇到问题: 尝试将 localhost 更改为 127.0.0.1 例如http://localhost:8080/http://127.0.0.1:8080/

    我面临的问题是我在 eclipse IDE (eclipse luna) 中使用 apache tomcat 为网站提供服务。

    为了进行健全性检查,我使用了 Remy Sharp 的演示: https://github.com/remy/html5demos/blob/eae156ca2e35efbc648c381222fac20d821df494/demos/geo.html

    尽管将代码托管在服务器上,但在对错误功能进行了细微调整后仍出现错误(仅在 firefox 上工作,在 chrome 和 safari 上失败):

    “用户拒绝地理位置”

    我进行了以下更改以获得更详细的错误消息:

    function error(msg) {
      var s = document.querySelector('#status');
      msg = msg.message ? msg.message : msg; //add this line
      s.innerHTML = typeof msg == 'string' ? msg : "failed";
      s.className = 'fail';
    
      // console.log(arguments);
    }
    

    http://10.0.2.2:8080 上的 virtualbox IE10 后面的 Internet Explorer 失败:

    “无法确定当前位置”

    【讨论】:

    • 是的,谢谢你,经过多年的尝试让这个工作(或使用 safari - yuk!)简单地将 url 更改为 127.0.0.1 对我有用。传奇!
    【解决方案5】:

    正如 robertc 的回答中已经提到的,Chrome 会阻止某些功能,例如带有本地文件的地理位置。设置自己的网络服务器的更简单的替代方法是使用参数启动 Chrome --allow-file-access-from-files。然后您可以使用地理位置,前提是您没有在设置中将其关闭。

    【讨论】:

      【解决方案6】:

      我在尝试 Gelocation API 时也遇到了这个问题。然后我通过 Visual Studio 启动 IIS Express,然后访问该页面,它在所有浏览器中都没有任何问题。

      【讨论】:

        【解决方案7】:

        以上都没有帮助到我。

        经过一番研究,我发现截至 M50(2016 年 4 月)-Chrome now requires a secure origin (such as HTTPS) for Geolocation

        Deprecated Features on Insecure Origins

        主机“localhost”是特殊的 b/c 它的“潜在安全”。如果您要部署到开发机器,则在开发过程中可能看不到错误。

        【讨论】:

        • 对于本地开发人员使用http://sitename.localhost Google Chrome 允许在.localhost 上使用getCurrentPosition(),谢谢!
        • @Duncanmoo 我尝试使用http://sitename.localhost,但它不起作用!
        • @salouri 请注意,上述答案和评论来自 2017 年和 2018 年,Chrome 此后进行了更改。也输入一些大写的东西就像喊叫一样,它也很模糊,不允许任何人进一步帮助你。
        【解决方案8】:

        最简单的方法是单击地址栏左侧的区域并在那里更改位置设置。它甚至允许为file:///设置位置选项

        【讨论】:

          【解决方案9】:

          检查 Google Chrome 设置并允许访问位置

          Change your default location settings.
          On your computer, open Chrome.
          At the top right, click More Settings.
          Under "Privacy and security," click Site settings.
          Click Location.
          Turn Ask before accessing on or off.
          

          在我更改了这些设置后,地理定位对我有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-26
            • 1970-01-01
            • 1970-01-01
            • 2012-08-16
            • 1970-01-01
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多