The MessageEvent
interface represents a message received by a target object.
This is used to represent messages in:
- Server-sent events (see
EventSource.onmessage
). - Web sockets (see the
onmessage
property of the WebSocket interface). - Cross-document messaging (see
Window.postMessage()
andWindow.onmessage
). - Channel messaging (see
MessagePort.postMessage()
andMessagePort.onmessage
). - Cross-worker/document messaging (see the above two entries, but also
Worker.postMessage()
,Worker.onmessage
,ServiceWorkerGlobalScope.onmessage
, etc.) - Broadcast channels (see
Broadcastchannel.postMessage()
) andBroadcastChannel.onmessage
). - WebRTC data channels (see
RTCDataChannel.onmessage
).
The action triggered by this event is defined in a function set as the event handler for the relevant message
event (e.g. using an onmessage
handler as listed above).
Constructor
MessageEvent()
- Creates a new
MessageEvent
.
Properties
This interface also inherits properties from its parent, Event
.
MessageEvent.data
Read only- The data sent by the message emitter.
MessageEvent.origin
Read only- A
USVString
representing the origin of the message emitter. MessageEvent.lastEventId
Read only- A
DOMString
representing a unique ID for the event. MessageEvent.source
Read only- A
MessageEventSource
(which can be aWindowProxy
,MessagePort
, orServiceWorker
object) representing the message emitter. MessageEvent.ports
Read only- An array of
MessagePort
objects representing the ports associated with the channel the message is being sent through (where appropriate, e.g. in channel messaging or when sending a message to a shared worker).
Methods
This interface also inherits methods from its parent, Event
.
MessageEvent.initMessageEvent()
- Initializes a message event. Do not use this anymore — use the
MessageEvent()
constructor instead.
Examples
In our Basic shared worker example (run shared worker), we have two HTML pages, each of which uses some JavaScript to perform a simple calculation. The different scripts are using the same worker file to perform the calculation — they can both access it, even if their pages are running inside different windows.
The following code snippet shows creation of a SharedWorker
object using the SharedWorker()
constructor. Both scripts contain this:
var myWorker = new SharedWorker('worker.js');
Both scripts then access the worker through a MessagePort
object created using the SharedWorker.port
property. If the onmessage event is attached using addEventListener, the port is manually started using its start()
method:
myWorker.port.start();
When the port is started, both scripts post messages to the worker and handle messages sent from it using port.postMessage()
and port.onmessage
, respectively:
first.onchange = function() { myWorker.port.postMessage([first.value,second.value]); console.log('Message posted to worker'); } second.onchange = function() { myWorker.port.postMessage([first.value,second.value]); console.log('Message posted to worker'); } myWorker.port.onmessage = function(e) { result1.textContent = e.data; console.log('Message received from worker'); }
Inside the worker we use the SharedWorkerGlobalScope.onconnect
handler to connect to the same port discussed above. The ports associated with that worker are accessible in the connect
event's ports
property — we then use MessagePort
start()
method to start the port, and the onmessage
handler to deal with messages sent from the main threads.
onconnect = function(e) { var port = e.ports[0]; port.addEventListener('message', function(e) { var workerResult = 'Result: ' + (e.data[0] * e.data[1]); port.postMessage(workerResult); }); port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter. }
Specifications
Specification | Status | Comment |
---|---|---|
WHATWG HTML Living Standard The definition of 'MessageEvent' in that specification. |
Living Standard |
Browser compatibility
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 1 | (Yes) | 4.0 (2.0) | 9 | ? | 10.0+ |
origin as USVString and source as MessageEventSource |
(Yes) | ? | 55.0 (55.0) | No support | ? | ? |
Feature | Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | ? | (Yes) | ? | ? | ? | 3.0+ |
origin as USVString and source as MessageEventSource |
? | ? | 55.0 (55.0) | No support | ? | ? |
See also
ExtendableMessageEvent
— similar to this interface but used in interfaces that needs to give more flexibility to authors.