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

时间:2018-10-12 17:34:29

标签: javascript html cordova google-maps-api-3 w3c-geolocation

除了navigator.permissions.query Permissions API 查询之外,还有其他方法可以检查geolocation权限。 导致其仍在工作草案中,并且浏览器兼容性较低。

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

一旦用户在本机权限弹出窗口上执行操作,问题就app resume了,然后想检查用户正在action采取的操作。

Hybrid Cordova App callback for location permission alert

平台:移动Android

注意:不想使用cordova diagnostic plugin

示例:

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

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

});

2 个答案:

答案 0 :(得分:2)

您可以直接使用navigator.geolocation,而无需先征得许可。它将像navigator.permissions一样自动引发询问位置提示。

navigator.geolocation.getCurrentPosition(
  (i)=>console.log('success',i),
  (i)=>console.log('failed',i)
)
Safari和Edge不支持

navigator.permissions,但支持navigator.geolocation,因此我认为只执行地理定位而不检查权限是安全的,因为它还会首先提高提示权限。

答案 1 :(得分:0)

我不这样认为。

此刻,navigator.permissions对象尚未定义-可能是出于有意将其在WebView中删除的,目的是不将Web权限与android权限混合使用。

选项1:

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

选项2:

通过请求位置来触发位置许可对话框。 当您收到包含PERMISSION_DENIED恒定代码的PositionError时,就意味着用户拒绝了位置权限(仅在现在或在应用设置时)。

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}
)