Chrome中的HTML 5地理位置提示

时间:2011-03-24 18:44:48

标签: html5 google-chrome geolocation file-uri

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

9 个答案:

答案 0 :(得分:96)

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

python -m SimpleHTTPServer

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

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

答案 1 :(得分:25)

以上都没有帮助过我。

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

Deprecated Features on Insecure Origins

主机“localhost”是特殊的b / c,它“具有潜在的安全性”。如果要部署到开发计算机,则在开发期间可能看不到错误。

答案 2 :(得分:6)

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

答案 3 :(得分:2)

答案 4 :(得分: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上失败):

&#34;用户拒绝地理定位&#34;

我做了以下更改以获取更详细的错误消息:

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

&#34;无法确定当前位置&#34;

答案 5 :(得分:2)

最简单的方法是点击地址栏左侧的区域并在那里更改位置设置。它允许为{% for i,j in mydata.items %} <div id="{{ i }}" class="tab-pane fade"> {% for room in j.room %} <h3>{{ room }}</h3> <p>Some content.</p> {% endfor %} </div> {% endfor %}

设置位置选项

enter image description here

答案 6 :(得分:1)

要获得简单的解决方法,只需将HTML文件复制到某些云共享(例如Dropbox),然后使用浏览器中的共享链接即可。简单。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

检查谷歌浏览器设置并允许位置访问

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.

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