docs.rodeo

MDN Web Docs mirror

MessagePort: postMessage() method

{{APIRef("Channel Messaging API")}}  {{AvailableInWorkers}} 

The postMessage() method of the {{domxref("MessagePort")}}  interface sends a message from the port, and optionally, transfers ownership of objects to other browsing contexts.

Syntax

postMessage(message)
postMessage(message, transfer)
postMessage(message, options)

Parameters

Return value

None ({{jsxref("undefined")}} ).

Examples

In the following code block, you can see a new channel being created using the {{domxref("MessageChannel.MessageChannel", "MessageChannel()")}}  constructor. When the IFrame has loaded, we pass {{domxref("MessageChannel.port2")}}  to the IFrame using {{domxref("window.postMessage")}}  along with a message. The iframe receives the message, and sends a message back on the MessageChannel using postMessage(). The handleMessage handler then responds to a message being sent back from the iframe using onmessage, putting it into a paragraph — {{domxref("MessageChannel.port1")}}  is listened to, to check when the message arrives.

const channel = new MessageChannel();
const para = document.querySelector("p");

const ifr = document.querySelector("iframe");
const otherWindow = ifr.contentWindow;

ifr.addEventListener("load", iframeLoaded, false);

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!");
});

For a full working example, see our channel messaging basic demo on GitHub (run it live too).

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

See also

In this article

View on MDN