cra*_*ver 57 javascript html5 w3c-geolocation
如果地理位置被拒绝,我需要JavaScript才能显示手动输入.
我尝试过的:
Modernizr.geolocation
navigator.geolocation
Run Code Online (Sandbox Code Playgroud)
两者均未描述用户之前是否拒绝访问地理位置.
Cri*_*hez 112
watchPosition并且getCurrentPosition都接受在出现错误时调用的第二个回调.错误回调为错误对象提供参数.对于拒绝的权限,error.code将是error.PERMISSION_DENIED(数值1).
在此处阅读更多内容:https://developer.mozilla.org/en/Using_geolocation
例:
navigator.geolocation.watchPosition(function(position) {
console.log("i'm tracking you!");
},
function(error) {
if (error.code == error.PERMISSION_DENIED)
console.log("you denied me :-(");
});Run Code Online (Sandbox Code Playgroud)
编辑:正如@Ian Devlin指出的那样,Firefox(本文发表时为4.0.1)似乎不支持这种行为.它可以在Chrome中运行,也可能是 Safari等.
End*_*ess 24
使用新的权限api,可以这样使用:
navigator.permissions.query({ name: 'geolocation' })
.then(console.log)Run Code Online (Sandbox Code Playgroud)
(仅适用于Blink和Firefox)
http://caniuse.com/#feat=permissions-api
Jos*_*zel 13
根据W3C 地理定位规范,您的getCurrentPosition调用可以返回成功回调和失败回调.但是,对于发生的任何错误,将调用您的失败回调,这是以下之一:(0)unknown; (1)许可被拒绝; (2)职位空缺; 或(3)超时.[ 来源:Mozilla ]
在您的情况下,如果用户明确拒绝访问,您希望执行特定操作.您可以检查error.code故障回调中的值,如下所示:
navigator.geolocation.getCurrentPosition(successCallback,
errorCallback,
{
maximumAge: Infinity,
timeout:0
}
);
function errorCallback(error) {
if (error.code == error.PERMISSION_DENIED) {
// pop up dialog asking for location
}
}
Run Code Online (Sandbox Code Playgroud)
可能的值prompt,granted和denied
const permissionStatus = await navigator?.permissions?.query({name: 'geolocation'})
const hasPermission = permissionStatus?.state // Dynamic value
Run Code Online (Sandbox Code Playgroud)
注意:这需要在一个
async函数中
如果要处理失败的情况,请?? myDefaultValue在第二行添加一个可选项。
| 归档时间: |
|
| 查看次数: |
65855 次 |
| 最近记录: |