Channel Messaging API の MessageChannel インターフェースは、新しいメッセージチャンネルを作成し、2 つの MessagePort プロパティを通して、その間でデータを送信できます。
註: この機能は Web Workers 内で利用可能です。
プロパティ
MessageChannel.port1読取専用- チャンネルの port1 を返します。
MessageChannel.port2読取専用- チャンネルの port2 を返します。
コンストラクタ
MessageChannel()-
2 つの新しい
MessagePortオブジェクトを持つ 新しいMessageChannelオブジェクトを返します。
例
次のコードブロックでは、MessageChannel.MessageChannel コンストラクタを使用して作成された新しいチャンネルを知ることができます。<iframe> が読み込まれると、MessagePort.postMessage にメッセージを添えて MessageChannel.port2 を <iframe> へ渡します。すると、handleMessage ハンドラが <iframe> から返送されたメッセージに (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 を参照してください (実際のデモも実行できます)。
仕様
| 仕様書 | 策定状況 | 備考 |
|---|---|---|
| WHATWG HTML Living Standard MessageChannel の定義 |
現行の標準 | HTML5 Web Messaging との差異なし。 |
ブラウザの実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| 基本サポート | 4 | 41 (41) | 10.0 | 10.6 | 5 |
| worker 内の利用 | (有) | 41 (41) | (有) | (有) | (有) |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | Firefox OS (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|---|
| 基本サポート | 4.4 | 4 | 41.0 (41) | (有) | 10.0 | 11.5 | 5.1 |
| worker 内の利用 | (有) | (有) | 41.0 (41) | (有) | (有) | (有) | (有) |