有没有办法检查地理位置是否已使用Javascript拒绝?

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等.

  • 不,我现在不确定!:-)我确实读过Firefox没有正确实现这个特定位的地方. (3认同)
  • 截至2015年12月仍未在Firefox 42.0中运行. (3认同)
  • 截至2013年8月,Firefox(23.0)仍不支持此功能.让我永远想出这个. (2认同)
  • 你好2018年!当用户现在拒绝权限时,Firefox 61会抛出正确的错误代码,无论方法如何(从不与现在相比). (2认同)

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

  • Safari 再次成为新的 ie :( (5认同)
  • @ trev9065 Blink是Chrome使用的浏览器引擎. (4认同)

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)


Gib*_*olt 5

内联权限检查

可能的值promptgranteddenied

const permissionStatus = await navigator?.permissions?.query({name: 'geolocation'})
const hasPermission = permissionStatus?.state // Dynamic value
Run Code Online (Sandbox Code Playgroud)

注意:这需要在一个async函数中

默认值:

如果要处理失败的情况,请?? myDefaultValue在第二行添加一个可选项。

链接:

  • 请记住,Safari 不支持 Web 权限 API,因此您需要 Apple 设备的后备方案。 (2认同)