首页 > 解决方案 > 如何检查 Chrome 移动浏览器中是否授予/阻止了增强现实权限?

问题描述

问题

Chrome 浏览器中的 WebXR 需要明确的用户同意(权限)才能进行空间跟踪,但我们遇到了阻止它的用户的问题。因此,为了向有此问题的用户提供相关的用户体验(而不是可能发生的其他错误),我们需要检查 Chrome 中的权限(增强现实)是否被授予,如下图所示:

增强现实阻止 img

我尝试过的

尽管“xr”权限描述符名称未在权限注册表中列出,但在WebXR 设备 API 规范 14.2中对其进行了描述。但是,以下代码返回错误。

navigator.permissions.query({name: 'xr'});

错误(我想这是预期的,因为它不在权限注册表中,我只是认为 Chrome 可能以某种方式对其进行了扩展):

TypeError: Failed to execute 'query' on 'Permissions': The provided value 'xr' is not a valid enum value of type PermissionName.

我也尝试过 'immersive-ar'、'xr-spatial-tracking' 等,但没有成功。'xr-spatial-tracking' 是一项功能策略,但如果我理解正确,功能策略的目的不是授予权限,而是限制页面上某些元素的权限(例如 iframe)。

WebXR 还使用相机和最有可能的陀螺仪和加速度计,但这些权限不受“允许/阻止增强现实”的影响。我认为这是由于相机/跟踪部分在设备上本地运行,而不是在浏览器中运行(我可能弄错了)。

示例

您可以在 Chrome 浏览器上使用移动设备访问此 three.js 示例,以查看 url 旁边的 tabblock 按钮下的“允许/阻止增强现实”权限。

如何检查这些权限是被授予还是被阻止?我不是在问如何用权限请求提示用户,只是权限状态的只读值会是完美的。

谢谢!

标签: javascriptandroidgoogle-chromepermissionswebxr

解决方案


您现在可以做的最好的事情是在用户手势期间请求空间跟踪,并在承诺被拒绝时显示 UI。

您可以通过阅读Chromium 源代码中的ParsePermissionDescriptor来查看 Chrome 支持的权限名称集。它不支持“xr”。我已经提交了这个 Chromium 错误来添加它,并且这个 Web 平台测试问题将它添加到 W3C 的 WebXR 测试套件中。

这是 Chrome 在该 API 中支持的内容列表。其中一些可能是实验性的。

  • 加速度计
  • 可访问性事件
  • 环境光传感器
  • 后台获取
  • 后台同步
  • 相机
  • 剪贴板读取
  • 剪贴板写
  • 显示捕获
  • 字体访问
  • 地理位置
  • 陀螺仪
  • 空闲检测
  • 磁力计
  • 麦克风
  • 迷笛
  • NFC
  • 通知
  • 付款处理程序
  • 周期性背景同步
  • 持久存储
  • 推送(仅适用于 {userVisible: true})
  • 屏幕唤醒锁定
  • 存储访问
  • 系统唤醒锁
  • 窗口放置

推荐阅读