ServiceWorkerContainer: startMessages() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流瀏覽器均已支援。

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

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

ServiceWorkerContainer 介面的 startMessages() 方法顯式地啟動從 Service Worker 分派訊息到其控制下的頁面的流程(例如,透過 Client.postMessage() 傳送)。這可以用於更早地響應已傳送的訊息,即使在頁面內容載入完成之前。

解釋

預設情況下,從頁面的控制 Service Worker 傳送到頁面的所有訊息(使用 Client.postMessage())會在頁面載入時排隊,並在頁面的 HTML 文件載入並解析完成後(即 DOMContentLoaded 事件觸發後)分派。可以透過呼叫 ServiceWorkerContainer.startMessages() 來更早地開始分派這些訊息,例如,如果你在頁面載入完成之前透過 EventTarget.addEventListener() 呼叫了訊息處理程式,但想立即開始處理訊息。

注意: 當直接使用 onmessage 設定處理程式時,訊息會開始自動傳送。在這種情況下,您不需要 startMessages()

語法

js
startMessages()

引數

無。

返回值

undefined.

示例

js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js").then(() => {
    console.log("Service Worker Registered");
  });
}

// …

navigator.serviceWorker.addEventListener("message", (e) => {
  // …
});

navigator.serviceWorker.startMessages();

規範

規範
Service Workers
# navigator-service-worker-startMessages

瀏覽器相容性