Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
MessagePort: postMessage() Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiepostMessage()-Methode derMessagePort-Schnittstelle sendet eine Nachricht vom Port und überträgt optional die Eigentumsrechte von Objekten auf andere Browsing-Kontexte.
In diesem Artikel
Syntax
postMessage(message)postMessage(message, transfer)postMessage(message, options)Parameter
messageDie Nachricht, die Sie über den Kanal senden möchten. Dies kann jeglicher Basisdatentyp sein. Mehrere Datenobjekte können als Array gesendet werden.
Hinweis:Ausführungskontexte, die einander Nachrichten senden können, müssen sich möglicherweise nicht im selbenAgenten-Cluster befinden und können daher keinen Speicher teilen.
SharedArrayBuffer-Objekte oder Pufferansichten, die von einem solchen unterstützt werden, können nicht über Agenten-Cluster hinweg gesendet werden. Der Versuch, dies zu tun, wird einmessageerror-Ereignis erzeugen, das einDataCloneErrorDOMExceptionauf der empfangenden Seite enthält.transferOptionalEin optionalesArray vonübertragbaren Objekten, um deren Eigentumsrechte zu übertragen. Das Eigentum dieser Objekte wird auf die Zielseite übertragen und sie sind auf der sendenden Seite nicht mehr verwendbar. Diese übertragbaren Objekte sollten der Nachricht beigefügt werden; andernfalls würden sie verschoben, aber auf der Empfängerseite nicht tatsächlich zugänglich sein.
optionsOptionalEin optionales Objekt, das die folgenden Eigenschaften enthält:
transferOptionalHat die gleiche Bedeutung wie der
transfer-Parameter.
Rückgabewert
Keiner (undefined).
Beispiele
Im folgenden Codeblock sehen Sie, wie ein neuer Kanal mithilfe desMessageChannel()-Konstruktors erstellt wird. Wenn dasIFrame geladen ist, übergeben wirMessageChannel.port2 an das IFrame mithilfe vonwindow.postMessage zusammen mit einer Nachricht. Das iframe empfängt die Nachrichtund sendet eine Nachricht zurück über denMessageChannel mitpostMessage().DerhandleMessage-Handler reagiert dann auf eine Nachricht vom IFrame überonmessage, indem er sie in einen Absatz einfügt —MessageChannel.port1 wird überwacht, um zu prüfen, wann die Nachricht ankommt.
const channel = new MessageChannel();const para = document.querySelector("p");const ifr = document.querySelector("iframe");const otherWindow = ifr.contentWindow;ifr.addEventListener("load", iframeLoaded);function iframeLoaded() { otherWindow.postMessage("Transferring message port", "*", [channel.port2]);}channel.port1.onmessage = handleMessage;function handleMessage(e) { para.innerHTML = e.data;}// in the iframe…window.addEventListener("message", (event) => { const messagePort = event.ports?.[0]; messagePort.postMessage("Hello from the iframe!");});Für ein vollständiges funktionierendes Beispiel siehe unserGrundlegendes Demo zur Kanalnachrichtenübermittlung auf GitHub (auch live ausführen).
Spezifikationen
| Specification |
|---|
| HTML> # dom-messageport-postmessage-dev> |