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 empfängt, die nicht deserialisiert werden kann.
Dieses Ereignis kann nicht abgebrochen werden und ist nicht aufsteigend.
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 Nachrichtensender gesendet wurden.
MessageEvent.origin
Schreibgeschützt-
Eine Zeichenkette, die den Ursprung des Nachrichtensenders darstellt.
MessageEvent.lastEventId
Schreibgeschützt-
Eine Zeichenkette, die eine eindeutige ID für das Ereignis darstellt.
MessageEvent.source
Schreibgeschützt-
Eine
MessageEventSource
(die ein WindowProxy,MessagePort
oderServiceWorker
-Objekt sein kann), die den Nachrichtensender darstellt. MessageEvent.ports
Schreibgeschützt-
Ein Array, das alle
MessagePort
-Objekte enthält, die mit der Nachricht gesendet wurden, in der Reihenfolge.
Beispiele
Angenommen, ein Skript erstellt einen MessageChannel
und sendet einen der Ports an einen anderen Browserkontext, wie zum Beispiel ein anderes <iframe>
, mit folgendem Code:
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]);
Der Empfänger kann den Port empfangen und beginnen, Nachrichten und Nachrichtenfehler darauf zu lauschen, indem er folgenden Code verwendet:
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();
});
Es ist zu beachten, dass der Listener MessagePort.start()
aufrufen muss, bevor Nachrichten an diesen Port übermittelt werden. Dies ist nur erforderlich, 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