测试是否已授予html5地理位置权限

时间:2012-05-18 14:19:15

标签: javascript html5 geolocation

有没有人知道是否有办法测试是否已授予先前的html5地理位置权限?

我尝试创建一个不请求地理位置的脚本,除非已经给出了页面的权限。是不是必须是html5;其他框架也可以。

3 个答案:

答案 0 :(得分:6)

第一部分实际上回答了您的问题,至少在Chrome 43+和Firefox 46+上(请参阅https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API):

navigator.permissions &&
navigator.permissions.query({name: 'geolocation'}).then(function(PermissionStatus) {
    if('granted' === PermissionStatus.state) {
        navigator.geolocation.getCurrentPosition(function(geoposition) {
            console.log(geoposition) /* You can use this position without prompting the user if the permission had already been granted */
        })
    }
})

答案 1 :(得分:1)

你能做的最好就是自己跟踪这个......

// initialization
if( sessionStorage.getItem("geo_access") === null ){
    // just assume it is prompt
    sessionStorage.setItem("geo_access", "prompt");
}

function ask(){
    navigator.geolocation.getCurrentPosition(function(){
        sessionStorage.setItem("geo_access", "granted");

    }, function(err){
        if(err.code == 1){ // PERMISSION_DENIED
            sessionStorage.setItem("geo_access", "denied");
        }
        sessionStorage.setItem("geo_access", "prompt");
    });
};

// Then somewhere
ask();

后备方法:

{
    "_app1": {
        "test": "test"
    },
    "location": {
        "longitude": 40.400000000000006,
        "latitude": 40.400000000000006,
        "country": "CH"
    },
    "timestamp": "2015-08-23"
}

答案 2 :(得分:0)

根据Geolocation API Specification,没有任何功能。 即使将其保存在浏览器首选项中的选项也不会推送到您的代码中。

如果它真的很重要并且您真的必须意识到这一点,那么您必须为每个常见浏览器编写一个浏览器插件并要求用户安装它。但我不会怀疑它。