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 应用程序的行为视为用户意图。