工作线程:消息事件
注意: 此功能在 Web Workers 中可用,但 Service Workers 除外。
当工作线程的父级从其工作线程接收到消息时(即当工作线程使用 DedicatedWorkerGlobalScope.postMessage()
发送消息时),会在 Worker
对象上触发 message
事件。
此事件不可取消,也不冒泡。
语法
在诸如 addEventListener()
之类的函数中使用事件名称,或设置事件处理程序属性。
js
addEventListener("message", (event) => {});
onmessage = (event) => {};
事件类型
MessageEvent
。继承自 Event
。
事件属性
此接口还继承了其父级 Event
的属性。
MessageEvent.data
只读-
消息发射器发送的数据。
MessageEvent.origin
只读-
表示消息发射器来源的字符串。
MessageEvent.lastEventId
只读-
表示事件唯一 ID 的字符串。
MessageEvent.source
只读-
表示消息发射器的
MessageEventSource
(可以是 WindowProxy、MessagePort
或ServiceWorker
对象)。 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 表只在浏览器中加载