Channel messaging
MessageChannel はチャンネルメッセージング API のインターフェイスで、新しいメッセージチャンネルを作成し、2 つの MessagePort プロパティを通して、その間でデータを送信できます。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 2 | 12 | 41 | 5 | 18 | 4.2 | |
| MessageChannel() は MessageChannel インターフェイスのコンストラクターで、2 つの新しい MessagePort オブジェクトを持つ新しい MessageChannel オブジェクトを返します。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| port1 は MessageChannel インターフェイスの読み取り専用プロパティで、メッセージチャンネルの第 1 ポートを返します。このポートは、チャンネルの元となるコンテキストに付属します。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| port2 は MessageChannel インターフェイスの読み取り専用プロパティで、メッセージチャンネルの第 2 ポートを返します。このポートは、チャンネルのもう一方の端のコンテキストに接続されたポートで、メッセージが最初に送信される先です。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| ports は MessageEvent インターフェイスの読み取り専用プロパティで、メッセージが(チャネルメッセージングや共有ワーカーにメッセージを送信する場合など、適切な場合に)送信されるチャネルに関連するポートを表す MessagePort オブジェクトの配列です。 | 4 | 12 | 3 | 4 | 18 | 3.2 |
| MessagePort はチャンネルメッセージング API のインターフェイスで、MessageChannel の 2 つのポートの一方を表し、片方のポートから送信されるメッセージをもう片方のポートで受信待機できます。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| close() は MessagePort インターフェイスのメソッドで、ポートの接続を切断し、ポートがアクティブではなくなります。これは、そのポートへのメッセージの送信を停止します。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| message イベントは MessagePort オブジェクトで、チャンネル上でメッセージが届いたときに発生します。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| postMessage() は MessagePort インターフェイスのメソッドで、ポートからのメッセージを送信します。任意で、オブジェクトの所有権を他の閲覧コンテキストへ転送します。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
| start() は MessagePort インターフェイスのメソッドで、ポート上のキューに置かれたメッセージの送信を開始します。このメソッドは、EventTarget.addEventListener を使用する場合のみ必要になります。MessagePort.message_event を使用する場合は暗黙に実行されます。 | 2 | 12 | 41 | 5 | 18 | 4.2 |
worker_support 労働者で利用可能 | 4 | 12 | 41 | 5 | 18 | 4.2 |
基本構文
const channel = new MessageChannel();
const output = document.querySelector(".output");
const 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;
} 実務での使いどころ
-
Channel messaging の活用
MessageChannel はチャンネルメッセージング API のインターフェイスで、新しいメッセージチャンネルを作成し、2 つの MessagePort プロパティを通して、その間でデータを送信できます。
注意点
- 古いブラウザでは対応していない場合がある。
実装メモ
- 一部の API はセキュアコンテキスト (HTTPS) やユーザー操作起点を必要とする。利用前に要件を確認すること。