17

Apart from setting a cookie the first time round, is there a way of detecting whether a user has already given permission for navigator.geolocation to return the lat/long of the browser?

If there is, what is it and is it the same across all browsers or different across all browsers?

This subject has been partially answered elsewhere

According to GeoLocation API – Chrome / Safari – Permission management and Visual Differences, Chrome asks for a revokable one-time permission. I haven't finished reading the article, but it would seem that storage of permissions is not a purely-Chrome thing to do.

Community
  • 1
  • 1
bugmagnet
  • 7,631
  • 8
  • 69
  • 131

3 Answers3

27

What about using localStorage which should be supported by all html5 browsers (that support geoLocation)

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
} 
//Get latitude and longitude;
function successFunction(position) {
    var lat = position.coords.latitude;
    var long = position.coords.longitude;

    localStorage['authorizedGeoLocation'] = 1;
}

function errorFunction(){
    localStorage['authorizedGeoLocation'] = 0;
}

function checkauthorizedGeoLocation(){ // you can use this function to know if geoLocation was previously allowed
    if(typeof localStorage['authorizedGeoLocation'] == "undefined" || localStorage['authorizedGeoLocation'] == "0" ) 
        return false;
    else 
        return true;
}

And then you check using the below function :

alert(checkauthorizedGeoLocation());

This is the jsfiddle if you need to check

Mehdi Karamosly
  • 5,388
  • 2
  • 32
  • 50
  • Now we're getting somewhere!! – bugmagnet May 22 '13 at 03:30
  • I hope it helps :) let me know if that is what you need. – Mehdi Karamosly May 22 '13 at 15:17
  • Mehdi, I'm giving you the bounty. It's been pointed out to me that the HTML version that gives me geolocation is the one that also gives me localStorage. – bugmagnet May 23 '13 at 03:06
  • 6
    @Mehndi: this POC will give error condition if user clear location setting from browser. In this case user still gets true from local storage even though location settings are cleared. – Shobha Singh Feb 04 '14 at 04:39
  • @ShobhaSingh That is expected, isn't it ? – Mehdi Karamosly Aug 19 '15 at 20:01
  • This doesn't distinguish if the permission was given permanently or not. If the user gives permission for just this visit then upon their next visit you will have the wrong value. –  Nov 03 '15 at 12:04
  • @TimCharters this was posted more than 2 years ago, not sure if giving permission for just one visit feature existed back then, but please feel free to suggest other solutions – Mehdi Karamosly Nov 03 '15 at 20:03
  • @MehdiKaramosly Indeed, though people are still looking at it. And wrong way round - iStuff seems to not be able to do permanent. It doesn't look like there is a solution unfortunately. –  Nov 04 '15 at 14:53
  • 1
    Dang, nice bounty there. Thanks for the function, this is exactly what I needed. – Captain Hypertext Nov 01 '16 at 14:19
  • @CaptainHypertext Thanks I am glad you like it and it resolve your problem. – Mehdi Karamosly Nov 01 '16 at 14:32
4

According to the spec, no - there's just the three methods on navigator.geolocation. However saving to a cookie or local storage is probably perfectly suitable - the permission is also stored in the user agent, so it should work correctly as the user moves between browsers.

AshleysBrain
  • 22,335
  • 15
  • 88
  • 124
  • However, the "Prompting for permission" section in https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation?redirectlocale=en-US&redirectslug=Using_geolocation would appear to imply that at least one browser has a mechanism to store permission. – bugmagnet May 20 '13 at 03:11
  • That appears to only apply to Firefox addons, not general web content. – AshleysBrain May 20 '13 at 11:25
1

Please see this answer on how to do it using the Permissions API: Check if Geolocation was allowed and get Lat Lon

Works without prompting the user if permission was granted previously.

codeMonkey
  • 4,134
  • 2
  • 31
  • 50
  • 1
    Note however that Permission API is not supported by all major browsers, namely Safari and iOS Safari: https://caniuse.com/#feat=permissions-api – jfloff Jun 25 '19 at 08:48