HTML 5 Geo Location Prompt in Chrome

104,903

Solution 1

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:

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

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.

Solution 2

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.

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.

Solution 3

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.

Solution 4

The easiest way is to click on the area left to the address bar and change location settings there. It allows to set location options even for file:///

enter image description here

Solution 5

if you're hosting behind a server, and still facing issues: try changing localhost to 127.0.0.1 e.g. http://localhost:8080/ to 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).

For my sanity check I was using Remy Sharp's demo: 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):

"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 :

"The current location cannot be determined"

Share:
104,903
AGoodDisplayName
Author by

AGoodDisplayName

Updated on March 02, 2021

Comments

  • AGoodDisplayName
    AGoodDisplayName over 3 years

    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:

    http://html5demos.com/geo

    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?

  • Feyyaz
    Feyyaz over 11 years
    python -m http.server for python 3.x
  • Emanegux
    Emanegux about 11 years
    Had the same issue and dropped the file into my local php server (xampp htdocs directory). I'm assuming if you want to use geolocation within a front-end application in development, you can't just run it from your desktop, it has to be server-side. I'm wondering why google decided to add that restriction to Chrome.
  • iegik
    iegik about 10 years
    php -S localhost:8080 php -S <addr>:<port> Run with built-in web server.
  • iegik
    iegik about 10 years
    node app.js Run simple Node.js content server on port 9615 stackoverflow.com/questions/6084360/…
  • vineetv2821993
    vineetv2821993 almost 10 years
    is there any solution for the file:// URI ??
  • Arti
    Arti over 9 years
    I am facing same issue, I cannot switch to python nor can host the page as the content is dynamic and has to be loaded form local drive only. Any other help?
  • giannis christofakis
    giannis christofakis over 9 years
    Doesn't work for me even if I run a local server. Location is allowed in my settings.
  • veta
    veta almost 9 years
    didn't know you could do this with python. super cool thanks :)
  • wh81752
    wh81752 over 8 years
    This answer is unrelated to the concrete problem as Chrome always blocks file://.
  • Charlie Tupman
    Charlie Tupman almost 8 years
    Yes thank you for this, after ages of messing around trying to get this working (or using safari - yuk!) simply changing the url to 127.0.0.1 worked for me. Legend!
  • Martin Ille
    Martin Ille over 7 years
    Unfortunately the linked article is old and obsolete now.
  • Duncanmoo
    Duncanmoo about 6 years
    For local dev use http://sitename.localhost Google Chrome allows getCurrentPosition() on .localhost, Thanks!
  • salouri
    salouri over 2 years
    @Duncanmoo I tried using http://sitename.localhost but it DOES NOT work!
  • Duncanmoo
    Duncanmoo over 2 years
    @salouri Note that the above answer and comment were from 2017 and 2018, Chrome has made changes since. Also typing something all caps is like shouting, it is also vague and does not allow anyone to help you further.