The MessageEvent
interface represents a message received by a target object.
This is used to represent messages in:
EventSource.onmessage
).onmessage
property of the WebSocket interface).Window.postMessage()
and Window.onmessage
).MessagePort.postMessage()
and MessagePort.onmessage
).Worker.postMessage()
, Worker.onmessage
, ServiceWorkerGlobalScope.onmessage
, etc.)Broadcastchannel.postMessage()
) and BroadcastChannel.onmessage
).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).
MessageEvent()
MessageEvent
.This interface also inherits properties from its parent, Event
.
MessageEvent.data
Read only
MessageEvent.origin
Read only
USVString
representing the origin of the message emitter.MessageEvent.lastEventId
Read only
DOMString
representing a unique ID for the event.MessageEvent.source
Read only
MessageEventSource
(which can be a WindowProxy
, MessagePort
, or ServiceWorker
object) representing the message emitter.MessageEvent.ports
Read only
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).This interface also inherits methods from its parent, Event
.
MessageEvent.initMessageEvent()
MessageEvent()
constructor instead.
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. }
Specification | Status | Comment |
---|---|---|
HTML Living Standard The definition of 'MessageEvent' in that specification. | Living Standard |
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 | ? | ? |
ExtendableMessageEvent
— similar to this interface but used in interfaces that needs to give more flexibility to authors.
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent