CaptureController: setFocusBehavior() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

CaptureController 接口的 setFocusBehavior() 方法控制在关联的 MediaDevices.getDisplayMedia() Promise fulfilled 时,捕获的选项卡或窗口是否会获得焦点,还是说焦点将保留在包含捕获应用程序的选项卡上。

您可以在调用 MediaDevices.getDisplayMedia() 之前多次设置此行为,或在其 Promise 解析后立即设置一次。在那之后,焦点行为被认为是最终确定的,无法再更改。

语法

js
setFocusBehavior(focusBehavior)

参数

focusBehavior

一个枚举值,用于描述用户代理应将焦点转移到捕获的显示表面,还是将捕获的应用程序保持焦点。可能的值为 focus-captured-surface(转移焦点)和 no-focus-change(将焦点保留在捕获的应用程序上)。

返回值

无 (undefined)。

异常

InvalidStateError DOMException

在以下情况下抛出

  • 捕获流已停止。
  • 用户选择共享屏幕(displaySurface 类型为 monitor),而不是共享 browser 选项卡或 window — 您无法使监视器获得焦点。在这种情况下,异常将在 MediaDevices.getDisplayMedia() Promise 解析后抛出。
  • MediaDevices.getDisplayMedia() Promise fulfilled 后已过去足够长的时间,焦点行为已最终确定。

示例

基本的 setFocusBehavior() 用法

js
// Create a new CaptureController instance
const controller = new CaptureController();

// Prompt the user to share a tab, window, or screen.
const stream = await navigator.mediaDevices.getDisplayMedia({ controller });

// Query the displaySurface value of the captured video track
const [track] = stream.getVideoTracks();
const displaySurface = track.getSettings().displaySurface;

if (displaySurface === "browser") {
  // Focus the captured tab.
  controller.setFocusBehavior("focus-captured-surface");
} else if (displaySurface === "window") {
  // Do not move focus to the captured window.
  // Keep the capturing page focused.
  controller.setFocusBehavior("no-focus-change");
}

规范

规范
屏幕捕获
# dom-capturecontroller-setfocusbehavior

浏览器兼容性

另见