MessagePort: messageerror 事件
注意:此功能在 Web Workers 中可用。
当 messageerror 事件在 MessagePort 对象上触发时,表示该对象接收到一个无法反序列化的消息。
此事件不可取消,也不会冒泡。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("messageerror", (event) => { })
onmessageerror = (event) => { }
事件类型
一个 MessageEvent。继承自 Event。
事件属性
此接口还继承了其父级 Event 的属性。
MessageEvent.data只读-
由消息发送者发送的数据。
MessageEvent.origin只读-
一个字符串,表示消息发送者的源。
MessageEvent.lastEventId只读-
一个字符串,表示事件的唯一 ID。
MessageEvent.source只读-
一个
MessageEventSource(可以是 WindowProxy、MessagePort或ServiceWorker对象),表示消息发送者。 MessageEvent.ports只读-
一个包含与消息一起发送的、按顺序排列的所有
MessagePort对象的数组。
示例
尝试共享内存
messageerror 事件的一个常见原因是在 代理集群 之间尝试发送 SharedArrayBuffer 对象或由其支持的缓冲区视图。例如,一个窗口与它创建的共享工作线程不在同一个代理集群中,因此假设页面运行以下代码:
js
const worker = new SharedWorker("worker.js");
worker.port.start();
worker.port.addEventListener("message", (event) => {
worker.port.postMessage(new SharedArrayBuffer(1024));
});
而 worker.js 包含以下代码:
js
self.addEventListener("connect", (event) => {
console.log("Hello");
const port = event.ports[0];
port.start();
port.postMessage("Port connected");
port.addEventListener("messageerror", (event) => {
console.log("Message error");
});
});
那么当共享工作线程尝试反序列化从窗口发送的消息时,就会收到一个 messageerror 事件。
注意: 您可以使用浏览器开发者工具来调试您的 SharedWorker。通过在浏览器地址栏中输入一个 URL 来访问开发者工具的工作线程检查器;例如,在 Chrome 中,URL 是 chrome://inspect/#workers,在 Firefox 中,URL 是 about:debugging#workers。
规范
| 规范 |
|---|
| HTML # event-messageerror |
| HTML # handler-messageport-onmessageerror |
浏览器兼容性
加载中…