Chrome 中的 HTML 5 地理位置提示
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5423938/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
HTML 5 Geo Location Prompt in Chrome
提问by AGoodDisplayName
Just starting to get into HTML 5 and an testing out geo location...liking it so far. I am hitting a bit of a speed bump though...when I try to get my geo location, chrome automatically blocks the page from getting my location. This does not happen at other sites such as the site below:
刚刚开始使用 HTML 5 并测试地理位置......到目前为止喜欢它。不过,我遇到了一些速度障碍……当我尝试获取我的地理位置时,chrome 会自动阻止页面获取我的位置。这不会发生在其他站点,例如以下站点:
The scripts I'm using:
我正在使用的脚本:
<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');
}
I am testing this out from a local directory on my machine, so there isn't really a "domain" like "http://whatever.com/mytestpage.html". Is this why I am not getting prompted? If so, is it possible to force the browswer to request permission to get the user's geo location and is it possible in my scenario?
我正在从我机器上的本地目录中测试它,所以实际上没有像“http://whatever.com/mytestpage.html”这样的“域”。这就是我没有收到提示的原因吗?如果是这样,是否可以强制浏览器请求获取用户地理位置的权限,在我的场景中是否可行?
回答by robertc
There's some sort of security restriction in place in Chrome for using geolocation from a file:///
URI, though unfortunately it doesn't seem to record any errors to indicate that. It will work from a local web server. If you have python installed try opening a command prompt in the directory where your test files are and issuing the command:
Chrome 中存在某种安全限制来使用来自file:///
URI 的地理定位,但不幸的是,它似乎没有记录任何错误来表明这一点。它将在本地 Web 服务器上工作。如果您安装了 python,请尝试在测试文件所在的目录中打开命令提示符并发出命令:
python -m SimpleHTTPServer
It should start up a web server on port 8000 (might be something else, but it'll tell you in the console what port it's listening on), then browse to http://localhost:8000/mytestpage.html
它应该在端口 8000 上启动一个 web 服务器(可能是别的东西,但它会在控制台中告诉你它正在侦听的端口),然后浏览到http://localhost:8000/mytestpage.html
If you don't have python there are equivalent modules in Ruby, or Visual Web Developer Express comes with a built in local web server.
如果您没有 Python,Ruby 中也有等效的模块,或者 Visual Web Developer Express 带有内置的本地 Web 服务器。
回答by Ryan
None of the above helped me.
以上都没有帮助我。
After a little research I found that as of M50 (April 2016) - Chrome now requires a secure origin (such as HTTPS) for Geolocation.
经过一些研究,我发现从 M50(2016 年 4 月)开始 - Chrome 现在需要一个安全的来源(例如 HTTPS)来进行 Geolocation。
Deprecated Features on Insecure Origins
The host "localhost" is special b/c its "potentially secure". You may not see errors during development if you are deploying to your development machine.
主机“本地主机”是特殊的 b/c 其“潜在安全”。如果您正在部署到您的开发机器,您可能不会在开发过程中看到错误。
回答by Tobias
As already mentioned in the answer by robertc, Chrome blocks certain functionality, like the geo location with local files. An easier alternative to setting up an own web server would be to just start Chrome with the parameter--allow-file-access-from-files
. Then you can use the geo location, provided you didn't turn it off in your settings.
正如 robertc 在回答中已经提到的那样,Chrome 会阻止某些功能,例如本地文件的地理位置。设置自己的网络服务器的一个更简单的替代方法是使用参数启动 Chrome--allow-file-access-from-files
。然后您可以使用地理位置,前提是您没有在设置中将其关闭。
回答by Marina Dunst
回答by davidtingsu
if you're hosting behind a server, and still facing issues: try changing localhostto 127.0.0.1e.g. http://localhost:8080/to http://127.0.0.1:8080/
如果您在服务器后面托管,并且仍然面临问题:尝试将localhost更改为127.0.0.1,例如http://localhost:8080/到http://127.0.0.1:8080/
The issue I was facing was that I was serving a site using apache tomcat within an eclipse IDE (eclipse luna).
我面临的问题是我在 eclipse IDE (eclipse luna) 中使用 apache tomcat 为站点提供服务。
For my sanity check I was using Remy Sharp's demo: https://github.com/remy/html5demos/blob/eae156ca2e35efbc648c381222fac20d821df494/demos/geo.html
对于我的健全性检查,我使用了 Remy Sharp 的演示:https: //github.com/remy/html5demos/blob/eae156ca2e35efbc648c381222fac20d821df494/demos/geo.html
and was getting the error after making minor tweaks to the error function despite hosting the code on the server (was only working on firefox and failing on chrome and safari):
尽管将代码托管在服务器上(仅在 Firefox 上工作,而在 chrome 和 safari 上失败),但在对错误函数进行了细微调整后仍收到错误:
"User denied Geolocation"
“用户拒绝地理定位”
I made the following change to get more detailed error message:
我进行了以下更改以获得更详细的错误消息:
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);
}
failing on internet explorer behind virtualbox IE10 on http://10.0.2.2:8080:
在http://10.0.2.2:8080上的 virtualbox IE10 后面的 Internet Explorer 上失败:
"The current location cannot be determined"
“无法确定当前位置”
回答by Bishoy Hanna
Make sure it's not blocked at your settings
确保它没有在您的设置中被阻止
http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/
http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/
回答by Mark Whitener
For an easy workaround, just copy the HTML file to some cloud share, such as Dropbox, and use the shared link in your browser. Easy.
一个简单的解决方法是将 HTML 文件复制到某个云共享,例如 Dropbox,然后在浏览器中使用共享链接。简单。
回答by Dilip Agheda
I too had this problem when i was trying out Gelocation API. I then started IIS express through visual studio and then accessed the page and It worked without any issue in all browsers.
我在尝试 Gelocation API 时也遇到了这个问题。然后我通过visual studio启动了IIS express,然后访问了页面,它在所有浏览器中都没有任何问题。