javascript - 如何检查 Chrome 移动浏览器中是否授予/阻止了增强现实权限?
问题描述
问题:
Chrome 浏览器中的 WebXR 需要明确的用户同意(权限)才能进行空间跟踪,但我们遇到了阻止它的用户的问题。因此,为了向有此问题的用户提供相关的用户体验(而不是可能发生的其他错误),我们需要检查 Chrome 中的权限(增强现实)是否被授予,如下图所示:
我尝试过的:
尽管“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 按钮下的“允许/阻止增强现实”权限。
如何检查这些权限是被授予还是被阻止?我不是在问如何用权限请求提示用户,只是权限状态的只读值会是完美的。
谢谢!
解决方案
您现在可以做的最好的事情是在用户手势期间请求空间跟踪,并在承诺被拒绝时显示 UI。
您可以通过阅读Chromium 源代码中的ParsePermissionDescriptor来查看 Chrome 支持的权限名称集。它不支持“xr”。我已经提交了这个 Chromium 错误来添加它,并且这个 Web 平台测试问题将它添加到 W3C 的 WebXR 测试套件中。
这是 Chrome 在该 API 中支持的内容列表。其中一些可能是实验性的。
- 加速度计
- 可访问性事件
- 环境光传感器
- 后台获取
- 后台同步
- 相机
- 剪贴板读取
- 剪贴板写
- 显示捕获
- 字体访问
- 地理位置
- 陀螺仪
- 空闲检测
- 磁力计
- 麦克风
- 迷笛
- NFC
- 通知
- 付款处理程序
- 周期性背景同步
- 持久存储
- 推送(仅适用于 {userVisible: true})
- 屏幕唤醒锁定
- 存储访问
- 系统唤醒锁
- 窗口放置
推荐阅读
- javascript - BugSnag ErrorBoundary 未在反应中显示自定义错误页面
- angular-material - 材质对话框管理多个对话框 z-index
- javascript - 如何以角度形式添加可选的 ngModelGroup?
- python - Flask / SqlAlchemy / Graphene - 如何从数据库中查询对象并更改值?
- java - Spring mvc不加载css和图像
- python-3.x - 使用 Octave 与 Python 计算极对时的不同结果
- windows - 使用批处理脚本查找替换变量文本的整个字符串行
- mysql - 仅选择最近的记录
- c++ - 如何将对象从类线程传递到帖子?
- laravel - 我如何通过这个配置在 laravel 6 中使用 FFMpeg?