Clients: claim() 方法

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有浏览器中可用。

注意:此功能仅在 Service Workers 中可用。

Clients 接口的 claim() 方法允许一个已激活的服务工作线程将其自身设置为其 scope 内所有客户端的 controller。这会在任何被该服务工作线程控制的客户端上触发 navigator.serviceWorkercontrollerchange 事件。

当服务工作线程首次注册时,页面在下次加载之前不会使用它。claim() 方法会立即使这些页面被控制。请注意,这会导致您的服务工作线程控制通过网络正常加载的页面,或者可能通过另一个服务工作线程加载的页面。

语法

js
claim()

参数

无。

返回值

一个 Promise,解析为 undefined

示例

下面的示例在服务工作线程的 activate 事件监听器中使用 claim(),这样同一作用域内加载的客户端就不需要重新加载,其 fetch 请求就会通过此服务工作线程。

js
self.addEventListener("activate", (event) => {
  event.waitUntil(clients.claim());
});

规范

规范
Service Workers
# clients-claim

浏览器兼容性

另见