WebXR 权限和安全
WebXR 设备 API 涉及几个安全领域,从建立权限策略(Permissions Policy)到确保用户在激活混合现实演示之前有意使用它。除其他事项外,您需要确认对麦克风和/或摄像机等设备功能的访问权限,获取使用沉浸式 VR 模式(如果适用)的权限,等等。XR 涉及的各种硬件和软件会用到多种 API 和技术。在本指南中,我们将介绍如何确保您的应用程序拥有提供安全和私密的 XR 体验所需的权限。
WebXR 设备 API 受多项权限和安全控制。虽然不繁琐,但值得注意。这些主要围绕全沉浸式 immersive-vr 会话模式,但在设置 AR 会话时也有需要注意的事项。
VR 的沉浸式演示
首先,如果发出请求的域名没有启用沉浸式会话的权限,任何请求激活 immersive-vr 模式的请求都将被拒绝。此权限来自 xr-spatial-tracking 权限策略。
通过此检查后,如果以下所有条件都成立,则允许进入 immersive-vr 模式的请求:
requestSession()调用是由在用户事件处理程序中执行的代码,或者由用户启动的 Web 应用程序的启动代码发出的。- 该文档被认为是可信的,因为它负责任,并且当前处于活动状态并具有焦点。
- 用户进入沉浸式 VR 模式的意图已被充分理解;有关详细信息,请参阅下面的“用户意图”。
如果所有这些条件都成立,则 requestSession() 返回的 Promise 将被解析,并且新的 XRSession 对象将传递到 fulfillment handler。否则,将抛出适当的异常,例如,如果文档没有进入沉浸式模式的权限,则抛出 SecurityError。
内联演示
当您请求一个模式设置为 inline 的 XRSession,并且需要或请求任何功能时,浏览器将仅在 requestSession() 调用是由明确由于用户意图而执行的代码发出时,才允许创建该会话。
具体而言:
- 如果
requestSession()调用不是在响应用户事件执行的处理程序中发出的,并且不是在启动 Web 应用程序时发出的,则请求将被拒绝,并且false将传递给 Promise 的 fulfillment handler。 - 如果发出请求的文档不是负责该脚本的文档,则请求将被拒绝。
- 如果发出请求的文档不可信,则请求将被拒绝,并且
false将通过 Promise 的 fulfillment routine 返回。可信文档是指负责任且活跃,并且当前具有焦点的文档。 - 如果用户打开内联 XR 演示的意图未被充分理解,则请求将被拒绝。对用户意图的理解可以是隐含的或显式的。
注意:由于在调用 requestSession() 时通过 options 对象请求了特定功能,可能会生效其他要求。
用户意图
用户意图是指代码正在执行的操作是由于用户想要或不想要执行某事而执行的。用户意图有两种:显式和隐式。
显式用户意图(显式用户同意)是在用户被明确要求执行某项操作的权限时授予的。
隐式用户意图(隐式用户同意)在以下任一情况下会被假定:
- 用户已与文档进行某种方式的交互,进而导致您的请求发生。例如,如果您有一个“进入 XR 模式”按钮,并且用户单击它,那么从按钮的
click事件处理程序调用requestSession()将被允许。 - 如果您的代码在 Web 应用程序启动期间执行,则运行时可能会认为启动您的 Web 应用程序的行为符合用户意图。