BroadcastChannel: messageerror 事件
注意:此功能在 Web Workers 中可用。
当通道上收到一条无法反序列化的消息时,会触发 BroadcastChannel 接口的 messageerror 事件。
语法
在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。
js
addEventListener("messageerror", (event) => { })
onmessageerror = (event) => { }
事件类型
一个 MessageEvent。继承自 Event。
事件属性
除了下面列出的属性之外,父接口 Event 的属性也可使用。
data只读-
由消息发送者发送的数据。
origin只读-
一个字符串,表示消息发送者的源。
lastEventId只读-
一个字符串,表示事件的唯一 ID。
source只读-
一个消息事件源,它可以是 WindowProxy、
MessagePort或ServiceWorker对象,代表消息的发送者。 ports只读-
一个
MessagePort对象数组,表示消息发送通道(如果适用,例如在通道消息传递或向共享工作者发送消息时)关联的端口。
示例
监听 messageerror 事件
此代码使用 addEventListener() 来监听消息和错误
js
const channel = new BroadcastChannel("example-channel");
channel.addEventListener("message", (event) => {
received.textContent = event.data;
});
channel.addEventListener("messageerror", (event) => {
console.error(event);
});
同样,但使用 onmessage 和 onmessageerror 事件处理程序属性
js
const channel = new BroadcastChannel("example-channel");
channel.onmessage = (event) => {
received.textContent = event.data;
};
channel.onmessageerror = (event) => {
console.log(event);
};
尝试共享内存
messageerror 事件的一个常见原因是尝试在代理集群(agent clusters)之间发送 SharedArrayBuffer 对象,或由其支持的缓冲区视图。以下代码演示了这一点。
页面 A 运行以下代码
js
const channel = new BroadcastChannel("hello");
channel.postMessage({ data: new SharedArrayBuffer(1024) });
页面 B 运行以下代码
js
const channel = new BroadcastChannel("hello");
channel.addEventListener("messageerror", (event) => {
console.error("Message error");
});
然后,当页面 B 尝试反序列化从页面 A 发送的消息时,它将收到一个 messageerror 事件。
规范
| 规范 |
|---|
| HTML # event-messageerror |
| HTML # handler-broadcastchannel-onmessageerror |
浏览器兼容性
加载中…
另见
- 相关事件:
message。