--- title: MessageEvent slug: Web/API/MessageEvent tags: - API - Channels - Interface - Reference - WebSockets - Window - Workers - messaging translation_of: Web/API/MessageEvent ---
L'interface MessageEvent
représente un message reçu par un objet cible.
Il est utilisé pour représenter les messages en :
onmessage
de l'interface WebSocket).L'action déclenchée par cet événement est définie dans une fonction définie comme gestionnaire d'événement pour l'événement {{event("message")}} correspondant (par exemple, en utilisant un gestionnaire onmessage
comme indiqué ci-dessus).
{{AvailableInWorkers}}
{{InheritanceDiagram(600, 80)}}
MessageEvent
.Cette interface hérite également des propriétés de son parent, {{domxref("Event")}}.
MessageEventSource
(qui peut être un objet {{domxref("WindowProxy")}}, {{domxref("MessagePort")}}, ou {{domxref("ServiceWorker")}}) représentant l'émetteur du message.Cette interface hérite également des méthodes de son parent, {{domxref("Event")}}.
Dans notre exemple de travailleur partagé basique (exécuter le travailleur partagé), nous avons deux pages HTML, dont chacune utilise un peu de JavaScript pour effectuer un calcul simple. Les différents scripts utilisent le même fichier worker pour effectuer le calcul - ils peuvent tous deux y accéder, même si leurs pages s'exécutent dans des fenêtres différentes.
L'extrait de code suivant montre la création d'un objet {{domxref("SharedWorker")}} à l'aide du constructeur {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}}. Les deux scripts contiennent ceci :
var myWorker = new SharedWorker('worker.js');
Les deux scripts accèdent ensuite au worker par le biais d'un objet {{domxref("MessagePort")}} créé à l'aide de la propriété {{domxref("SharedWorker.port")}}. Si l'événement onmessage est attaché à l'aide de addEventListener, le port est démarré manuellement à l'aide de sa méthode start()
:
myWorker.port.start();
Lorsque le port est démarré, les deux scripts postent des messages au worker et traitent les messages envoyés par celui-ci en utilisant respectivement port.postMessage()
et port.onmessage
:
first.onchange = function() { myWorker.port.postMessage([first.value,second.value]); console.log('Message posté au worker'); } second.onchange = function() { myWorker.port.postMessage([first.value,second.value]); console.log('Message posté au worker'); } myWorker.port.onmessage = function(e) { result1.textContent = e.data; console.log('Message reçu du worker'); }
À l'intérieur du worker, nous utilisons le gestionnaire {{domxref("SharedWorkerGlobalScope.onconnect")}} pour nous connecter au même port que celui mentionné ci-dessus. Les ports associés à ce worker sont accessibles dans la propriété ports
de l'événement {{event("connect")}} - nous utilisons ensuite {{domxref("MessagePort")}} La méthode start()
pour démarrer le port, et le handler onmessage
pour gérer les messages envoyés par les processus principaux.
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(); // Requis si vous utilisez addEventListener. Sinon, il est appelé implicitement par le paramètre onmessage. }
Spécification | Statut | Commentaire |
---|---|---|
{{SpecName('HTML WHATWG', "#messageevent", "MessageEvent")}} | {{Spec2('HTML WHATWG')}} |
{{Compat("api.MessageEvent")}}