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

浏览器兼容性