ServiceWorkerContainer: ready 属性

Baseline 已广泛支持

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

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

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

ServiceWorkerContainer 接口中的只读属性 ready 提供了一种延迟代码执行直到 service worker 激活的方法。

该属性返回一个永远不会拒绝的 Promise,它会无限期地等待,直到当前页面关联的 ServiceWorkerRegistration 拥有一个 active(活动)的 worker。一旦满足该条件,它将使用 ServiceWorkerRegistration 解析。

一个永远不会拒绝的 Promise,当存在活动的 service worker 时,它最终可能会使用 ServiceWorkerRegistration 进行解析。

示例

延迟代码直到存在活动的 service worker

js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker.ready.then((registration) => {
    console.log(`A service worker is active: ${registration.active}`);

    // At this point, you can call methods that require an active
    // service worker, like registration.pushManager.subscribe()
  });
} else {
  console.error("Service workers are not supported.");
}

规范

规范
Service Workers
# navigator-service-worker-ready

浏览器兼容性