BroadcastChannel: messageerror event
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2022.
Note: This feature is available in Web Workers.
The messageerror
event of the BroadcastChannel
interface fires when a message that can't be deserialized arrives on the channel.
Syntax
Use the event name in methods like addEventListener()
, or set an event handler property.
addEventListener("messageerror", (event) => { })
onmessageerror = (event) => { }
Event type
A MessageEvent
. Inherits from Event
.
Event properties
In addition to the properties listed below, properties from the parent interface, Event
, are available.
data
Read only-
The data sent by the message emitter.
origin
Read only-
A string representing the origin of the message emitter.
lastEventId
Read only-
A string representing a unique ID for the event.
source
Read only-
A message event source, which is either a WindowProxy, a
MessagePort
, or aServiceWorker
object representing the message emitter. ports
Read only-
An array of
MessagePort
objects representing the ports associated with the channel the message is being sent through (where appropriate, e.g., in channel messaging or when sending a message to a shared worker).
Examples
>Listening for messageerror events
This code uses addEventListener()
to listen for messages and errors:
const channel = new BroadcastChannel("example-channel");
channel.addEventListener("message", (event) => {
received.textContent = event.data;
});
channel.addEventListener("messageerror", (event) => {
console.error(event);
});
The same, but using the onmessage
and onmessageerror
event handler properties:
const channel = new BroadcastChannel("example-channel");
channel.onmessage = (event) => {
received.textContent = event.data;
};
channel.onmessageerror = (event) => {
console.log(event);
};
Attempting to share memory
A common cause of messageerror
events is attempting to send a SharedArrayBuffer
object, or a buffer view backed by one, across agent clusters. The following code demonstrates this.
Page A runs the following code:
const channel = new BroadcastChannel("hello");
channel.postMessage({ data: new SharedArrayBuffer(1024) });
Page B runs the following code:
const channel = new BroadcastChannel("hello");
channel.addEventListener("messageerror", (event) => {
console.error("Message error");
});
Then page B will receive a messageerror
event when it tries to deserialize the message sent from page A.
Specifications
Specification |
---|
HTML> # event-messageerror> |
HTML> # handler-broadcastchannel-onmessageerror> |
Browser compatibility
Loading…
See also
- Related events:
message
.