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

瀏覽器相容性

另見