MessagePort: messageerror-Ereignis
Baseline 2023Newly available
Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Das messageerror
-Ereignis wird bei einem MessagePort
-Objekt ausgelöst, wenn es eine Nachricht erhält, die nicht deserialisiert werden kann.
Dieses Ereignis kann nicht abgebrochen werden und löst sich nicht nach oben (bubbelt nicht).
Syntax
Verwenden Sie den Ereignisnamen in Methoden wie addEventListener()
oder setzen Sie eine Ereignishandler-Eigenschaft.
addEventListener("messageerror", (event) => { })
onmessageerror = (event) => { }
Ereignistyp
Ein MessageEvent
. Erbt von Event
.
Ereigniseigenschaften
Diese Schnittstelle erbt auch Eigenschaften von ihrem Elternteil, Event
.
MessageEvent.data
Schreibgeschützt-
Die Daten, die vom Nachrichten-Emitter gesendet wurden.
MessageEvent.origin
Schreibgeschützt-
Ein String, der den Ursprung des Nachrichten-Emitters repräsentiert.
MessageEvent.lastEventId
Schreibgeschützt-
Ein String, der eine eindeutige ID für das Ereignis darstellt.
MessageEvent.source
Schreibgeschützt-
Eine
MessageEventSource
(die ein WindowProxy,MessagePort
oder einServiceWorker
-Objekt sein kann), die den Nachrichten-Emitter repräsentiert. MessageEvent.ports
Schreibgeschützt-
Ein Array, das alle
MessagePort
-Objekte enthält, die mit der Nachricht in Reihenfolge gesendet wurden.
Beispiele
Angenommen, ein Skript erstellt einen MessageChannel
und sendet einen der Ports an einen anderen Browsing-Kontext, wie zum Beispiel ein anderes <iframe>
, mit einem Code wie diesem:
const channel = new MessageChannel();
const myPort = channel.port1;
const targetFrame = window.top.frames[1];
const targetOrigin = "https://example.org";
const messageControl = document.querySelector("#message");
const channelMessageButton = document.querySelector("#channel-message");
channelMessageButton.addEventListener("click", () => {
myPort.postMessage(messageControl.value);
});
targetFrame.postMessage("init", targetOrigin, [channel.port2]);
Das Ziel kann den Port empfangen und beginnen, Nachrichten und Nachrichtenfehler darauf zu hören, mit einem Code wie diesem:
window.addEventListener("message", (event) => {
const myPort = event.ports[0];
myPort.addEventListener("message", (event) => {
received.textContent = event.data;
});
myPort.addEventListener("messageerror", (event) => {
console.error(event.data);
});
myPort.start();
});
Beachten Sie, dass der Listener MessagePort.start()
aufrufen muss, bevor Nachrichten an diesen Port gesendet werden. Dies ist nur nötig, wenn die addEventListener()
-Methode verwendet wird: Wenn der Empfänger stattdessen onmessage
verwendet, wird start()
implizit aufgerufen:
window.addEventListener("message", (event) => {
const myPort = event.ports[0];
myPort.onmessage = (event) => {
received.textContent = event.data;
};
myPort.onmessageerror = (event) => {
console.error(event.data);
};
});
Spezifikationen
Specification |
---|
HTML # event-messageerror |
HTML # handler-messageport-onmessageerror |
Browser-Kompatibilität
Siehe auch
- Verwandte Ereignisse:
message
. - Verwendung von Channel Messaging