工作线程:消息事件

注意: 此功能在 Web Workers 中可用,但 Service Workers 除外。

当工作线程的父级从其工作线程接收到消息时(即当工作线程使用 DedicatedWorkerGlobalScope.postMessage() 发送消息时),会在 Worker 对象上触发 message 事件。

此事件不可取消,也不冒泡。

语法

在诸如 addEventListener() 之类的函数中使用事件名称,或设置事件处理程序属性。

js
addEventListener("message", (event) => {});

onmessage = (event) => {};

事件类型

事件属性

此接口还继承了其父级 Event 的属性。

MessageEvent.data 只读

消息发射器发送的数据。

MessageEvent.origin 只读

表示消息发射器来源的字符串。

MessageEvent.lastEventId 只读

表示事件唯一 ID 的字符串。

MessageEvent.source 只读

表示消息发射器的 MessageEventSource(可以是 WindowProxyMessagePortServiceWorker 对象)。

MessageEvent.ports 只读

表示与消息发送通道关联的端口的 MessagePort 对象数组(在适当情况下,例如在通道消息传递中或将消息发送到共享工作线程时)。

示例

此代码创建一个新的工作线程,并使用 addEventListener() 侦听来自它的消息。

js
const worker = new Worker("static/scripts/worker.js");

worker.addEventListener("message", (event) => {
  console.log(`Received message from worker: ${event.data}`);
});

或者,它可以使用 onmessage 事件处理程序属性侦听。

js
const worker = new Worker("static/scripts/worker.js");

worker.onmessage = (event) => {
  console.log(`Received message from worker: ${event.data}`);
};

工作线程使用 self.postMessage() 发布消息。

js
// static/scripts/worker.js

self.postMessage("I'm alive!");

规范

规范
HTML 标准
# event-message

浏览器兼容性

BCD 表只在浏览器中加载

另请参阅