有谁知道是否有办法测试是否已授予先前的 html5 地理定位权限?
我尝试制作一个不请求地理位置的脚本,除非该页面的权限已经获得。不一定非得是 html5;其他框架也可以。
有谁知道是否有办法测试是否已授予先前的 html5 地理定位权限?
我尝试制作一个不请求地理位置的脚本,除非该页面的权限已经获得。不一定非得是 html5;其他框架也可以。
第一部分实际上回答了您的问题,至少在 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 */
})
}
})
你能做的最好的就是自己跟踪这个......
// In chrome you can now do this
navigator.permissions.query({name: 'geolocation'}).then(function(PermissionStatus){
console.log(PermissionStatus.state) // prompt, granted, denied
// even listen for changes
PermissionStatus.onchange = function(){
console.log(this.state)
}
})
回退方法:
// 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();
根据Geolocation API 规范,没有任何功能。甚至将其保存在浏览器首选项中的选项也不会推送到您的代码中。
如果它真的很重要并且您确实必须意识到这一点,那么您必须为每个常见的浏览器编写一个浏览器插件并要求用户安装它。但我不会怀疑。