--- title: Channel Messaging API slug: Web/API/Channel_Messaging_API tags: - API - Channel messaging - HTML API - Overview - Reference translation_of: Web/API/Channel_Messaging_API ---
{{DefaultAPISidebar("Channel Messaging API")}}
Channel Messaging API(チャンネルメッセージング API)を使用すると、同じドキュメントに添付された異なる閲覧コンテキストで実行される2つの別々のスクリプト(2つの IFrame、メインドキュメントと IFrame、{{domxref("SharedWorker")}} を介した2つのドキュメント、2つのワーカーなど)で直接通信し、両端にポートを持つ双方向チャンネル(またはパイプ)を介して相互にメッセージをやり取りできます。
{{AvailableInWorkers}}
メッセージチャンネルは {{domxref("MessageChannel.MessageChannel", "MessageChannel()")}} コンストラクタを使用して作成します。 作成すると、チャンネルの2つのポートは {{domxref("MessageChannel.port1")}} プロパティおよび {{domxref("MessageChannel.port2")}} プロパティを介してアクセスできます(どちらのプロパティも {{domxref("MessagePort")}} オブジェクトを返します)。 チャンネルを作成したアプリは port1
を使用し、ポートの反対側のアプリは port2
を使用します — port2
にメッセージを送信し、{{domxref("window.postMessage")}} を使用して2つの引数(送信するメッセージと所有権を移管するオブジェクト、この場合はポート自体)でポートを他の閲覧コンテキストに移管します。
これらの移管可能なオブジェクトを移管すると、それらは以前のコンテキスト — 以前にそれらが属していたもの — では「撤回され(neutered)」ます。 例えば、ポートを送信すると、元のコンテキストでは使用できなくなります。
もう一方の閲覧コンテキストは、{{domxref("MessagePort.onmessage")}} を使用してメッセージをリッスンし、イベントの data
属性を使用してメッセージの内容を取得できます。 {{domxref("MessagePort.postMessage")}} を使用して元のドキュメントにメッセージを送り返すことで応答できます。
チャンネルへのメッセージ送信を停止したい場合は、{{domxref("MessagePort.close")}} を呼び出してポートを閉じることができます。
この API の使用方法の詳細については、Channel Messaging の使用を参照してください。
MessagePort
の配列。 同時に複数のポートにメッセージをブロードキャストできるようにするための実験的な解決策。仕様 | 状態 | コメント |
---|---|---|
{{SpecName('HTML WHATWG', 'web-messaging.html#channel-messaging', 'Channel messaging')}} | {{Spec2('HTML WHATWG')}} |
MessageChannel
{{Compat("api.MessageChannel", 0)}}
MessagePort
{{Compat("api.MessagePort", 0)}}