Chrome中的HTML 5地理位置提示


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”这样的“域”。这就是为什么我没有得到提示吗?如果是这样,是否有可能迫使浏览器请求许可以获取用户的地理位置,并且在我的情况下有可能吗?


firefox在该页面中显示提示btw
Ionut Popa

Answers:


97

Chrome中存在使用file:///URI进行地理位置定位的某种安全限制,尽管很遗憾,它似乎并未记录任何错误来表明这一点。它将在本地Web服务器上工作。如果您已安装python,请尝试在测试文件所在的目录中打开命令提示符,然后发出命令:

python -m SimpleHTTPServer

它应该在端口8000上启动Web服务器(可能是其他端口,但是它将在控制台中告诉您正在监听的端口),然后浏览到http:// localhost:8000 / mytestpage.html

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


9
python -m http.server对于python 3.x
Feyyaz 2013年

遇到相同的问题,并将文件拖放到我的本地php服务器(xampp htdocs目录)中。我假设如果要在开发中的前端应用程序中使用地理位置,则不能只从桌面运行它,而必须在服务器端运行。我想知道为什么Google决定将该限制添加到Chrome。
Emanegux

php -S localhost:8080 php -S <addr>:<port>使用内置的Web服务器运行。
iegik 2014年

node app.js运行简单的Node.js加载内容服务器的端口9615 stackoverflow.com/questions/6084360/...
iegik

有没有解决file:// URI的方法?
vineetv2821993 2014年

28

以上都不对我有帮助。

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

不安全来源的不推荐使用的功能

主机“ localhost”是特殊的,因为它的“潜在安全性”。如果部署到开发计算机,则在开发过程中可能看不到错误。


1
对于本地开发人员,请在.localhost上使用http://sitename.localhostGoogle Chrome浏览器允许getCurrentPosition(),谢谢!
Duncanmoo

6

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




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上失败:

“无法确定当前位置”


是的,为此,在经过多年的混乱尝试使之正常运行(或使用safari-yuk!)之后,只需将url更改为127.0.0.1就可以了。传说!
查理·图普曼

1

为了轻松解决,只需将HTML文件复制到某些云共享(如Dropbox),然后在浏览器中使用共享链接。简单。


0

我在尝试Gelocation API时也遇到了这个问题。然后,我通过Visual Studio启动IIS Express,然后访问该页面,并且在所有浏览器中都可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.