--- title: MessageEvent slug: Web/API/MessageEvent tags: - API - WebSockets - リファレンス translation_of: Web/API/MessageEvent ---
{{APIRef("HTML DOM")}}
MessageEvent
インターフェースは対象のオブジェクトから受け取ったメッセージを表します。
次のメッセージを表すために使用されます。
onmessage
プロパティを参照).このイベントによって引き起こされるアクションは、対応する {{event("message")}} イベント (例えば、 上記の onmessage
ハンドラーを使ったもの) のイベントハンドラーとして設定された関数の中で定義されています。
{{AvailableInWorkers}}
MessageEvent
を作成します。このインターフェースは親 {{domxref("Event")}} からプロパティを継承します。
MessageEventSource
で、メッセージエミッターを表します。このインターフェースは親 {{domxref("Event")}} から継承します。
基礎的な shared worker の例 (run shared worker) の中では、2 つの HTML ページがあり、それぞれのページが単純な計算をする JavaScript を実行しています。異なるスクリプトが計算を実行するために同一の worker ファイルを使用しています。ページの異なるウィンドウ内で動作していても、どちらのスクリプトも worker ファイルにアクセスできます。
次のコードスニペットは、{{domxref("SharedWorker.SharedWorker", "SharedWorker()")}} コンストラクターで SharedWorker
オブジェクトの作成を示します。どちらのスクリプトもこれを含んでいます。
var myWorker = new SharedWorker('worker.js');
次にどちらのスクリプトも {{domxref("SharedWorker.port")}} プロパティで作成された {{domxref("MessagePort")}} オブジェクトを通して worker にアクセスします。onmessage event が addEventListener で加えられると、start()
メソッドでポートは手動で開きます。
myWorker.port.start();
ポートが開くと、どちらのスクリプトも worker にメッセージを送信し、送信されたメッセージを port.postMessage()
と port.onmessage
でそれぞれ処理します。
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'); }
worker の内部では、同一のポートに接続するために {{domxref("SharedWorkerGlobalScope.onconnect")}} ハンドラーを使っています。その worker と対応したポートは、{{event("connect")}} イベントの ports
プロパティで接続可能です。その後、ポートを開くために {{domxref("MessagePort")}} の start()
メソッドを、メインのスレッドから送信されたメッセージを処理するためにonmessage
ハンドラーを使用します。
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. }
仕様書 | 策定状況 | コメント |
---|---|---|
{{SpecName('HTML WHATWG', "#messageevent", "MessageEvent")}} | {{Spec2('HTML WHATWG')}} |
{{Compat("api.MessageEvent")}}