--- title: MessageChannel slug: Web/API/MessageChannel tags: - API - Channel Messaging API - Interface - MessageChannel - Reference - web messaging translation_of: Web/API/MessageChannel ---

{{APIRef("HTML DOM")}}

Channel Messaging APIMessageChannel インターフェースは、新しいメッセージチャンネルを作成し、2 つの {{domxref("MessagePort")}} プロパティを通して、その間でデータを送信できます。

{{AvailableInWorkers}}

プロパティ

{{domxref("MessageChannel.port1")}} {{readonlyInline}}
チャンネルの port1 を返します。
{{domxref("MessageChannel.port2")}} {{readonlyInline}}
チャンネルの port2 を返します。

コンストラクタ

{{domxref("MessageChannel.MessageChannel", "MessageChannel()")}}

2 つの新しい {{domxref("MessagePort")}} オブジェクトを持つ 新しい MessageChannel オブジェクトを返します。

次のコードブロックでは、{{domxref("MessageChannel()", "MessageChannel.MessageChannel")}} コンストラクタを使用して作成された新しいチャンネルを知ることができます。{{HTMLElement("iframe")}} が読み込まれると、{{domxref("MessagePort.postMessage")}} にメッセージを添えて {{domxref("MessageChannel.port2")}} を {{HTMLElement("iframe")}} へ渡します。すると、handleMessage ハンドラが {{HTMLElement("iframe")}} から返送されたメッセージに ({{domxref("MessagePort.onmessage")}} を使用して) 返答し、これを段落に挿入します。

var channel = new MessageChannel();
var para = document.querySelector('p');

var ifr = document.querySelector('iframe');
var otherWindow = ifr.contentWindow;

ifr.addEventListener("load", iframeLoaded, false);

function iframeLoaded() {
  otherWindow.postMessage('Hello from the main page!', '*', [channel.port2]);
}

channel.port1.onmessage = handleMessage;
function handleMessage(e) {
  para.innerHTML = e.data;
}

完全に動作する例は、Github 上の channel messaging basic demo を参照してください (実際のデモも実行できます)。

仕様

仕様書 策定状況 備考
{{SpecName('HTML WHATWG', '#message-channels','MessageChannel')}} {{Spec2('HTML WHATWG')}} {{SpecName("HTML5 Web Messaging")}} との差異なし。

ブラウザの実装状況

{{Compat("api.MessageChannel")}}

関連情報