navigator.permissions.query Permissions API是否有替代方法?

Shi*_*hel 6 html javascript google-maps-api-3 w3c-geolocation cordova

是否有任何替代navigator.permissions.query 权限API查询,以检查geolocation许可。导致其仍在工作草案中,并且浏览器兼容性较差。

W3C权限参考: https : //www.w3.org/TR/permissions/

问题是,app resume一旦用户对本机权限弹出窗口执行操作,然后要检查action用户是否采取了该措施。

混合式Cordova应用回调,用于位置权限警报

平台:移动Android

注意:不想使用cordova diagnostic plugin

例:

navigator.permissions.query({name:'geolocation'}).then(function(result) {

  console.log('result : ', result);

});
Run Code Online (Sandbox Code Playgroud)

kaf*_*lim 7

您可以直接使用,navigator.geolocation无需事先征得许可。它会像navigator.permissionsdo一样自动提出询问位置提示。

navigator.geolocation.getCurrentPosition(
  (i)=>console.log('success',i),
  (i)=>console.log('failed',i)
)
Run Code Online (Sandbox Code Playgroud)

navigator.permissions在 safari 和 edge 中不支持,但navigator.geolocation支持,所以我认为不检查许可就执行地理定位是安全的,因为它也会首先提高提示许可。

  • 想知道是否有办法知道用户之前是否允许访问。在解释为什么我要要求之前,我不想直接向他们索要。在某些情况下,用户的本能是拒绝它。 (4认同)

pio*_*_cz 3

我不这么认为。

此时 navigator.permissions 对象未定义 - 可能是出于不将 Web 权限与 Android 权限混合的目的而在 WebView 中删除了它。

选项1:

您可以尝试Cordova 诊断插件,特别是getLocationAuthorizationStatus应以与 Permissions API 非常相似的方式返回权限状态的方法。请注意,我还没有尝试过该插件。

选项2:

通过请求位置触发位置权限对话框。当您收到带有常量代码的PositionErrorPERMISSION_DENIED时,这意味着用户拒绝了位置权限(刚才或在应用程序设置中)。

navigator.getCurrentPosition(
  function(position) { /** won't be executed for such short timeout */ },
  function(positionError) {
    switch (positionError.code) {
    // PERMISSION_DENIED
    case 1:
      console.log('Permission denied')
      break
    // POSITION_UNAVAILABLE
    case 2:
      console.log('Permission allowed, location disabled')
      break
    // TIMEOUT
    case 3:
      console.log('Permission allowed, timeout reached')
      break
    }
  },
  {timeout: 0}
)
Run Code Online (Sandbox Code Playgroud)