ServiceWorkerRegistration

Baseline 广泛可用 *

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

* 此特性的某些部分可能存在不同级别的支持。

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

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

ServiceWorkerRegistration 接口是 Service Worker API 的一部分,它代表一个 Service Worker 注册。您可以注册一个 Service Worker 来控制共享同一来源的一个或多个页面。

Service Worker 注册的生命周期会超出代表它们的 ServiceWorkerRegistration 对象在其对应 Service Worker 客户端生命周期内的存在时间。浏览器会维护一个活动的 ServiceWorkerRegistration 对象列表。

EventTarget ServiceWorkerRegistration

实例属性

也继承自其父接口 EventTarget 的属性。

ServiceWorkerRegistration.active 只读

返回一个状态为 activatingactivated 的 Service Worker。该属性初始值为 null。如果客户端的 URL 落在注册的范围内(即在首次调用 ServiceWorkerContainer.register 时设置的 scope 选项),则活动 Service Worker 将控制该 Client

ServiceWorkerRegistration.backgroundFetch 只读 实验性

返回一个指向 BackgroundFetchManager 对象的引用,该对象负责管理后台获取操作。

ServiceWorkerRegistration.cookies 只读

返回一个指向 CookieStoreManager 接口的引用,该接口允许订阅和取消订阅 cookie 更改事件。

ServiceWorkerRegistration.index 只读 实验性

返回一个指向 ContentIndex 接口的引用,用于管理用于离线查看的索引内容。

ServiceWorkerRegistration.installing 只读

返回一个状态为 installing 的 Service Worker。该属性初始值为 null

ServiceWorkerRegistration.navigationPreload 只读

返回与当前 Service Worker 注册关联的 NavigationPreloadManager 实例。

ServiceWorkerRegistration.paymentManager 只读 实验性

返回一个支付应用的 PaymentManager 实例,用于管理各种支付应用功能。

ServiceWorkerRegistration.periodicSync 只读 实验性

返回一个指向 PeriodicSyncManager 接口的引用,该接口允许注册在特定时间间隔运行的任务。

ServiceWorkerRegistration.pushManager 只读

返回一个指向 PushManager 接口的引用,用于管理推送订阅,包括订阅、获取当前订阅和访问推送权限状态。

ServiceWorkerRegistration.scope 只读

返回一个字符串,表示定义 Service Worker 注册范围的 URL;也就是说,Service Worker 可以控制的 URL 范围。

ServiceWorkerRegistration.sync 只读

返回一个指向 SyncManager 接口的引用,该接口负责管理后台同步进程。

ServiceWorkerRegistration.updateViaCache 只读

返回用于确定在尝试更新 Service Worker 或通过 importScripts() 导入的任何脚本时,浏览器将如何查询 HTTP 缓存的设置值。它可以是以下值之一:importsallnone

ServiceWorkerRegistration.waiting 只读

返回一个状态为 installed 的 Service Worker。该属性初始值为 null

实例方法

也继承自其父接口 EventTarget 的方法。

ServiceWorkerRegistration.getNotifications()

从当前来源通过当前 Service Worker 注册创建的通知列表,按创建顺序返回。

ServiceWorkerRegistration.showNotification()

显示带有请求标题的通知。

ServiceWorkerRegistration.unregister()

注销 Service Worker 注册并返回一个 Promise。Service Worker 在注销前将完成所有正在进行的活动。

ServiceWorkerRegistration.update()

检查服务器是否有更新版本的 Service Worker,而不查询缓存。

事件

updatefound

ServiceWorkerRegistration.installing 属性获取到一个新的 Service Worker 时,随时触发。

示例

在此示例中,代码首先检查浏览器是否支持 Service Worker,如果支持则注册一个。接下来,它添加了一个 updatefound 监听器,在该监听器中,它使用 Service Worker 注册来监听 Service Worker 状态的进一步变化。如果 Service Worker 自上次注册以来没有改变,则不会触发 updatefound 事件。

js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("/sw.js")
    .then((registration) => {
      registration.addEventListener("updatefound", () => {
        // If updatefound is fired, it means that there's
        // a new service worker being installed.
        const installingWorker = registration.installing;
        console.log(
          "A new service worker is being installed:",
          installingWorker,
        );

        // You can listen for changes to the installing service worker's
        // state via installingWorker.onstatechange
      });
    })
    .catch((error) => {
      console.error(`Service worker registration failed: ${error}`);
    });
} else {
  console.error("Service workers are not supported.");
}

规范

规范
Service Workers
# serviceworkerregistration-interface
推送 API
# extensions-to-the-serviceworkerregistration-interface

浏览器兼容性

另见