MessagePort
The MessagePort
interface of the Channel Messaging API (en-US) represents one of the two ports of a MessageChannel
, allowing messages to be sent from one port and listening out for them arriving at the other.
Note: This feature is available in Web Workers
Methods
Inherits methods from its parent, EventTarget
postMessage()
-
Sends a message from the port, and optionally, transfers ownership of objects to other browsing contexts.
start()
(en-US)-
Starts the sending of messages queued on the port (only needed when using
EventTarget.addEventListener
; it is implied when usingMessagePort.onmessage
(en-US).) close()
(en-US)-
Disconnects the port, so it is no longer active.
Event handlers
Inherits event handlers from its parent, EventTarget
onmessage
(en-US)-
An
EventListener
called whenMessageEvent
(en-US) of typemessage
is fired on the port—that is, when the port receives a message. onmessageerror
(en-US)-
An
EventListener
called when aMessageEvent
(en-US) of typeMessageError
is fired—that is, when it receives a message that cannot be deserialized.
Events
message
(en-US)-
Fired when a
MessagePort
object receives a message. Also available via theonmessage
(en-US) property. messageerror
(en-US)-
Fired when a
MessagePort
object receives a message that can't be deserialized. Also available via theonmessageerror
(en-US) property.
Example
In the following example, you can see a new channel being created using the MessageChannel()
(en-US) constructor.
When the IFrame has loaded, we register an onmessage
(en-US) handler for MessageChannel.port1
(en-US) and transfer MessageChannel.port2
(en-US) to the IFrame using the window.postMessage
(en-US) method along with a message.
When a message is received back from the IFrame, the onMessage
function simply outputs the message to a paragraph.
var channel = new MessageChannel(); var output = document.querySelector('.output'); var iframe = document.querySelector('iframe'); // Wait for the iframe to load iframe.addEventListener("load", onLoad); function onLoad() { // Listen for messages on port1 channel.port1.onmessage = onMessage; // Transfer port2 to the iframe iframe.contentWindow.postMessage('Hello from the main page!', '*', [channel.port2]); } // Handle messages received on port1 function onMessage(e) { output.innerHTML = e.data; }
For a full working example, see our channel messaging basic demo on Github (run it live too).
Specifications
Specification | Status | Comment |
---|---|---|
HTML Living Standard The definition of 'Message ports' in that specification. |
Padrão em tempo real |
Compatibilidade com navegadores
BCD tables only load in the browser