ExtendableMessageEvent

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有浏览器中可用。

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

ExtendableMessageEvent 接口是 Service Worker API 的一部分,它代表了在 Service Worker 上触发的 message 事件的事件对象(当 Service Worker 的 ServiceWorkerGlobalScope 从另一个上下文接收到消息时)——它扩展了此类事件的生命周期。

此接口继承自 ExtendableEvent 接口。

Event ExtendableEvent ExtendableMessageEvent

构造函数

ExtendableMessageEvent()

创建新的 ExtendableMessageEvent 对象实例。

实例属性

继承自其父级 ExtendableEvent 的属性.

ExtendableMessageEvent.data 只读

返回事件的数据。它可以是任何数据类型。如果分发在 messageerror 事件中,则该属性将为 null

ExtendableMessageEvent.origin 只读

返回发送消息的 Client 的来源。

ExtendableMessageEvent.lastEventId 只读

Server-Sent Events 中,表示事件源的最后一个事件 ID。

ExtendableMessageEvent.source 只读

返回发送消息的 Client 对象的引用。

ExtendableMessageEvent.ports 只读

返回包含代表关联消息通道的端口的 MessagePort 对象的数组。

实例方法

继承自其父级 ExtendableEvent 的方法.

示例

在下面的示例中,一个页面通过 ServiceWorkerRegistration.active 获取了 ServiceWorker 对象的句柄,然后调用了它的 postMessage() 函数。

js
// in the page being controlled
if (navigator.serviceWorker) {
  navigator.serviceWorker.register("service-worker.js");

  navigator.serviceWorker.addEventListener("message", (event) => {
    // event is a MessageEvent object
    console.log(`The service worker sent me a message: ${event.data}`);
  });

  navigator.serviceWorker.ready.then((registration) => {
    registration.active.postMessage("Hi service worker");
  });
}

Service Worker 可以通过监听 message 事件来接收消息

js
// in the service worker
addEventListener("message", (event) => {
  // event is an ExtendableMessageEvent object
  console.log(`The client sent me a message: ${event.data}`);

  event.source.postMessage("Hi client");
});

规范

规范
Service Workers
# extendablemessageevent-interface

浏览器兼容性

另见