ServiceWorkerGlobalScope.skipWaiting()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.

ServiceWorkerGlobalScopeServiceWorkerGlobalScope.skipWaiting() 方法强制等待 service worker 成为激活的 service worker。

这个方法与 Clients.claim() 一起使用,以确保原 service worker 的更新,能立即对当前对客户端和其他所有激活的客户端生效。

语法

js
skipWaiting()

参数

无。

返回值

一个 Promise,该 promise 会立即兑现为 undefined

示例

虽然 self.skipWaiting() 可以在 service worker 执行期间的任何时间点调用,但是它只有在新安装的 service worker 可能保持在 waiting 状态的时候才会起作用。因此,通常从 InstallEvent 处理程序内部调用 self.skipWaiting()

以下示例会导致新安装的 service worker 进入 activating 状态,而不会管是否已经有一个激活的 service worker。

js
self.addEventListener("install", (event) => {
  // skipWaiting() 返回一个 promise,但完全可以忽略它
  self.skipWaiting();

  // 执行 service worker 安装所需
  // 的任何其他操作,
  // 可能需要在 event.waitUntil() 的内部进行
});

规范

Specification
Service Workers
# service-worker-global-scope-skipwaiting

浏览器兼容性

BCD tables only load in the browser

参见