--- title: MessagePort slug: Web/API/MessagePort tags: - API - Channel messaging - HTML5 - Interface - MessagePort - Reference translation_of: Web/API/MessagePort ---
{{APIRef("HTML DOM")}}
Channel Messaging API の MessagePort
インターフェースは、{{domxref("MessageChannel")}} の 2 つのポートの一方を表し、片方のポートから送信されるメッセージをもう片方のポートで受信待機できます。
{{AvailableInWorkers}}
親である {{domxref("EventTarget")}} からのメソッドを継承します。
親である {{domxref("EventTarget")}} からのイベントハンドラを継承します。
message
型の {{domxref("MessageEvent")}} がポート上で発動した時に呼び出される {{domxref("EventListener")}} です。つまり、ポートがメッセージを受信した時に呼び出されます。messageerror
型の {{domxref("MessageEvent")}} が発火すると呼び出されます。つまり、デシリアライズできないメッセージを受け取ったときです。次のコードブロックには、{{domxref("MessageChannel()", "MessageChannel.MessageChannel")}} コンストラクタで作成された新しいチャンネルがあります。
Iframe が読み込まれると、{{domxref("MessageChannel.port1")}} に onmessage
ハンドラーを登録し、メッセージと共に {{domxref("window.postMessage")}} を使用して IFrame に {{domxref("MessageChannel.port2")}} を送信します。
IFrame からメッセージが返却されると。onMessage
関数でメッセージをパラグラフに出力します。
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; }
完全に動作する例は、Github 上の channel messaging basic demo を参照してください (実際のデモも実行できます)。
仕様書 | 策定状況 | 備考 |
---|---|---|
{{SpecName('HTML WHATWG', 'web-messaging.html#message-ports','Message ports')}} | {{Spec2('HTML WHATWG')}} |
{{Compat("api.MessagePort")}}