WebXR 权限和安全

WebXR 设备 API 有多个安全领域需要处理,从建立 权限策略 到确保用户在激活混合现实呈现之前有意使用它。除了其他事项,您需要确认对设备功能(如麦克风和/或摄像头)的访问权限,获得使用沉浸式 VR 模式(如果适用)的权限,等等。参与 XR 的各种硬件和软件将多个 API 和技术融合在一起。在本指南中,我们将介绍如何确保您的应用程序拥有提供安全和私密 XR 体验所需的权限。

WebXR 设备 API 受制于许多权限和安全控制。虽然不繁琐,但值得注意。这些主要围绕完全沉浸式 immersive-vr 会话模式,但在设置 AR 会话时也要注意一些事项。

VR 的沉浸式呈现

首先,如果发出请求的域没有权限启用沉浸式会话,则任何激活 immersive-vr 模式的请求都会被拒绝。此权限来自 xr-spatial-tracking 权限策略

通过该检查后,如果以下所有条件都满足,则允许进入 immersive-vr 模式的请求

  • requestSession() 调用由在用户事件处理程序中执行的代码发出,或者从用户启动的 Web 应用程序 的启动代码发出。
  • 该文档被认为是可信的,因为它既负责任,又是当前活动的,并且具有焦点。
  • 用户进入沉浸式 VR 模式的意图已明确了解;有关详细信息,请参见下面的 用户意图

如果所有这些条件都满足,则 requestSession() 返回的 Promise 会被解决,并且新的 XRSession 对象将传递到履行处理程序中。否则,会抛出一个适当的异常,例如,如果文档没有权限进入沉浸式模式,则会抛出 SecurityError

内联呈现

当您请求 XRSession 且模式设置为 inline,并且需要或请求任何功能时,浏览器只会在调用 requestSession() 的代码明确由于 **用户意图** 而执行的情况下才允许创建该会话。

具体来说

  • 如果 requestSession() 调用不是来自响应用户事件而执行的处理程序中,并且不是在启动 Web 应用程序时发出的,则该请求会被拒绝,并且 false 会被传递到 Promise 的履行处理程序。
  • 如果发出请求的文档不是负责脚本的文档,则该请求会被拒绝。
  • 如果发出请求的文档不可信,则该请求会被拒绝,并且 false 会通过 Promise 的履行例程返回。可信文档是指既负责任又活动的文档,并且当前具有焦点。
  • 如果用户打开内联 XR 演示的意图没有得到很好的理解,则该请求会被拒绝。对 用户意图 的理解可以是隐式或显式的。

注意:由于调用 requestSession() 时选项对象请求的特定功能,可能会实施其他要求。

用户意图

用户意图是指代码执行的动作是否由于用户打算执行的操作而执行。用户意图有两种:**隐式** 和 **显式**。

当用户明确且直接被要求允许执行某个操作时,就授予了 **显式用户意图**(显式用户同意)。

如果以下任一情况成立,则假定 **隐式用户意图**(隐式用户同意)。

  • 用户与文档进行了一些交互,这些交互导致您的请求发生。例如,如果您有一个“进入 XR 模式”按钮,而用户点击了它,则从该按钮的 click 事件处理程序中调用 requestSession() 将被允许。
  • 如果您的代码在启动 Web 应用程序期间执行,则运行时可能会将启动您的 Web 应用程序的行为视为用户意图。