InstallEvent

Baseline 廣泛可用 *

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

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

作為傳遞給 install 事件處理函式引數的 InstallEvent 介面,它代表了一個在 ServiceWorkerServiceWorkerGlobalScope 上分派的安裝操作。作為 ExtendableEvent 的子類,它確保在安裝期間不會分派諸如 FetchEvent 等功能性事件。

此介面繼承自 ExtendableEvent 介面。

Event ExtendableEvent InstallEvent

建構函式

InstallEvent() 實驗性

建立一個新的 InstallEvent 物件。

例項屬性

繼承自其父級 ExtendableEvent 的屬性.

例項方法

繼承自其父級 ExtendableEvent 的方法.

addRoutes() 實驗性

指定一個或多個靜態路由,這些路由定義了用於獲取指定資源的規則,即使在 Service Worker 啟動之前也會使用這些規則。

示例

此程式碼片段來自 Service Worker 預取示例 (請參閱 預取即時執行)。該程式碼在 ServiceWorkerGlobalScope.oninstall 中呼叫了 ExtendableEvent.waitUntil(),並推遲將 ServiceWorkerRegistration.installing worker 視為已安裝,直到傳入的 Promise 成功解析。當所有資源都已獲取並快取,或者發生任何異常時,Promise 就會解析。

程式碼片段還展示了 Service Worker 使用的快取版本控制的最佳實踐。儘管此示例只有一個快取,但您也可以將此方法用於多個快取。該程式碼將快取的簡寫識別符號對映到特定的、已版本的快取名稱。

注意: 日誌語句可以透過 Google Chrome 的“檢查”介面在相關 Service Worker 中可見,該介面可透過 chrome://serviceworker-internals 訪問。

js
const CACHE_VERSION = 1;
const CURRENT_CACHES = {
  prefetch: `prefetch-cache-v${CACHE_VERSION}`,
};

self.addEventListener("install", (event) => {
  const urlsToPrefetch = [
    "./static/pre_fetched.txt",
    "./static/pre_fetched.html",
    "https://www.chromium.org/_/rsrc/1302286216006/config/customLogo.gif",
  ];

  console.log(
    "Handling install event. Resources to pre-fetch:",
    urlsToPrefetch,
  );

  event.waitUntil(
    caches
      .open(CURRENT_CACHES["prefetch"])
      .then((cache) =>
        cache.addAll(
          urlsToPrefetch.map(
            (urlToPrefetch) => new Request(urlToPrefetch, { mode: "no-cors" }),
          ),
        ),
      )
      .then(() => {
        console.log("All resources have been fetched and cached.");
      })
      .catch((error) => {
        console.error("Pre-fetching failed:", error);
      }),
  );
});

規範

規範
Service Workers
# installevent

瀏覽器相容性

另見