ServiceWorkerGlobalScope

Baseline 廣泛可用 *

此功能已成熟,可跨多種裝置和瀏覽器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有瀏覽器中可用。

* 此特性的某些部分可能存在不同級別的支援。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

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

ServiceWorkerGlobalScope 介面是 Service Worker API 的一部分,代表了 service worker 的全域性執行上下文。

開發者應注意,ServiceWorker 的狀態在終止/重啟週期之間不會持久化,因此每個事件處理程式都應假設它是以一個乾淨的、預設的全域性狀態被呼叫的。

一旦成功註冊,service worker 在空閒時會被終止以節省記憶體和處理器資源。活動 service worker 會被自動重啟以響應事件,例如 fetchmessage

此外,不允許在 service worker 中進行同步請求 — 只能使用非同步請求,例如透過 fetch() 方法發起的請求。

此介面繼承自 WorkerGlobalScope 介面,以及其父介面 EventTarget

EventTarget WorkerGlobalScope ServiceWorkerGlobalScope

例項屬性

此介面繼承了 WorkerGlobalScope 介面及其父介面 EventTarget 的屬性。

ServiceWorkerGlobalScope.clients 只讀

包含與 service worker 關聯的 Clients 物件。

ServiceWorkerGlobalScope.cookieStore 只讀

返回一個指向與 service worker 關聯的 CookieStore 物件的引用。

ServiceWorkerGlobalScope.registration 只讀

包含表示 service worker 註冊的 ServiceWorkerRegistration 物件。

ServiceWorkerGlobalScope.serviceWorker 只讀

包含表示 service worker 的 ServiceWorker 物件。

例項方法

此介面繼承了 WorkerGlobalScope 介面及其父介面 EventTarget 的方法。

ServiceWorkerGlobalScope.skipWaiting()

允許當前 service worker 註冊在 service worker 客戶端使用它時,從等待狀態 progression 到活動狀態。

事件

使用 addEventListener() 偵聽此事件,或將事件監聽器分配給此介面的 oneventname 屬性。

activate

ServiceWorkerRegistration 獲得一個新的 ServiceWorkerRegistration.active worker 時觸發。

backgroundfetchabort 實驗性

當一個 後臺獲取操作被使用者或應用程式取消時觸發。

backgroundfetchclick 實驗性

當用戶點選 後臺獲取操作的 UI 時觸發。

backgroundfetchfail 實驗性

後臺獲取操作中的至少一個請求失敗時觸發。

backgroundfetchsuccess 實驗性

後臺獲取操作中的所有請求都成功時觸發。

canmakepayment 實驗性

在支付應用程式的 service worker 上觸發,以檢查其是否已準備好處理付款。具體來說,當商家網站呼叫 PaymentRequest() 建構函式時觸發。

contentdelete 實驗性

ContentIndex 中的一項被移除時觸發。

cookiechange

當發生與 service worker 的 cookie 更改訂閱列表匹配的 cookie 更改時觸發。

fetch

當呼叫 fetch() 時觸發。

install

ServiceWorkerRegistration 獲得一個新的 ServiceWorkerRegistration.installing worker 時觸發。

message

當收到傳入訊息時觸發。受控頁面可以使用 MessagePort.postMessage() 方法向 service worker 傳送訊息。

messageerror

當傳入訊息無法反序列化時觸發。

notificationclick

當用戶點選已顯示的通知時觸發。

notificationclose

當用戶關閉已顯示的通知時觸發。

paymentrequest 實驗性

當透過 PaymentRequest.show() 方法在商家網站上啟動支付流程時,在支付應用程式上觸發。

sync

當從 service worker 客戶端頁面呼叫 SyncManager.register 時觸發。同步嘗試會立即進行(如果網路可用),或在網路可用時儘快進行。

periodicsync 實驗性

在註冊 PeriodicSyncManager 時指定的週期性間隔觸發。

push

當收到伺服器推送通知時觸發。

pushsubscriptionchange

當推送訂閱已失效或即將失效時觸發(例如,當推送服務設定了到期時間時)。

示例

此程式碼片段來自 service worker prefetch 示例(請參閱 prefetch 示例線上演示。) onfetch 事件處理程式偵聽 fetch 事件。當觸發時,程式碼返回一個 promise,該 promise 解析為 Cache 物件中的第一個匹配請求。如果未找到匹配項,程式碼將從網路獲取響應。

程式碼還處理了從 fetch() 操作中丟擲的異常。請注意,HTTP 錯誤響應(例如 404)不會觸發異常。它將返回一個正常的響應物件,其中包含相應的錯誤程式碼。

js
self.addEventListener("fetch", (event) => {
  console.log("Handling fetch event for", event.request.url);

  event.respondWith(
    caches.match(event.request).then((response) => {
      if (response) {
        console.log("Found response in cache:", response);

        return response;
      }
      console.log("No response found in cache. About to fetch from network…");

      return fetch(event.request).then(
        (response) => {
          console.log("Response from network is:", response);

          return response;
        },
        (error) => {
          console.error("Fetching failed:", error);

          throw error;
        },
      );
    }),
  );
});

規範

規範
Service Workers
# serviceworkerglobalscope-interface

瀏覽器相容性

另見