有没有办法检测用户是否已经授权使用navigator.geolocation?

bug*_*net 16 html5 cross-browser geolocation user-permissions w3c-geolocation

除了第一次设置cookie之外,有没有办法检测用户是否已经授予navigator.geolocation权限以返回浏览器的纬度/经度?

如果有,它是什么,所有浏览器是一样的,还是所有浏览器都不同?

该主题已在其他地方得到部分解答

根据GeoLocation API - Chrome/Safari - 权限管理和视觉差异,Chrome要求获得可撤销的一次性权限.我还没有读完这篇文章,但似乎存储权限并不是纯粹的Chrome操作.

Meh*_*sly 24

那么使用localStorage应该是所有html5浏览器都支持的(支持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;
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下功能检查:

alert(checkauthorizedGeoLocation());
Run Code Online (Sandbox Code Playgroud)

如果你需要检查,这是jsfiddle

  • @Mehndi:如果用户从浏览器清除位置设置,此POC将给出错误条件.在这种情况下,即使清除了位置设置,用户仍然可以从本地存储中获得真实. (5认同)

Ash*_*ain 5

根据规范,没有 - 只有三种方法navigator.geolocation。然而,保存到 cookie 或本地存储可能是完全合适的 - 权限也存储在用户代理中,因此当用户在浏览器之间移动时它应该正常工作。