69

刚刚开始进入 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”这样的“域”。这就是我没有收到提示的原因吗?如果是这样,是否可以强制浏览器请求获取用户地理位置的权限,在我的场景中是否有可能?

4

9 回答 9

97

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

python -m SimpleHTTPServer

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

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

于 2011-03-25T11:30:03.147 回答
30

以上都没有帮助我。

经过一番研究,我发现从 M50(2016 年 4 月)开始,Chrome 现在需要一个安全来源(例如 HTTPS)来进行 Geolocation

不安全来源上已弃用的功能

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

于 2016-05-11T17:33:19.100 回答
6

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

于 2015-10-23T08:11:45.547 回答
3

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

在此处输入图像描述

于 2017-03-31T12:45:59.520 回答
2

确保它没有在您的设置中被阻止

http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/

于 2013-05-15T00:53:04.557 回答
2

如果您在服务器后面托管,但仍然面临问题:尝试将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 失败:

“无法确定当前位置”

于 2015-09-24T21:20:39.857 回答
1

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

于 2015-01-16T01:45:07.397 回答
0

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

于 2015-12-19T10:52:18.027 回答
0

检查 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.

在我更改了这些设置后,Geolocation 为我工作。

于 2021-02-28T23:35:08.667 回答