Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年9月.
チャンネルメッセージング API (Channel Messaging API) を使用すると、同じ文書に添付された異なる閲覧コンテキストで実行される 2 つの別々のスクリプト(2 つの IFrame、メイン文書と IFrame、SharedWorker を介した 2 つの文書など)で直接通信し、両端にポートを持つ双方向チャンネル(またはパイプ)を介して相互にメッセージをやり取りすることができます。
この記事では、このテクノロジーを使用するための基本を探ります。
メモ: この機能はウェブワーカー内で利用可能です。
チャンネルメッセージングは、ゲーム、アドレス帳、または音楽を個人用に選択したオーディオプレーヤーなど、IFrame を介して他のサイトの機能をメインインターフェイスに埋め込むソーシャルサイトがある場合に主に役立ちます。 これらが独立したユニットとして機能する場合は問題ありませんが、メインサイトと IFrame、または異なる IFrame との間のやり取りが必要な場合は困難になります。 例えば、メインサイトからアドレス帳に連絡先を追加したり、メインプロファイルにゲームのハイスコアを追加したり、オーディオプレーヤーからゲームに新しい BGM の選択肢を追加したりする場合はどうすればよいのでしょうか。 ウェブが使用するセキュリティモデルのため、このようなことは従来のウェブテクノロジーを使用したのでは、それほど簡単ではありません。 オリジンがお互いを信頼しているかどうか、そしてメッセージをどのように渡すのかについて考えなければなりません。
一方、メッセージチャンネルは、異なる閲覧コンテキスト間でデータを受け渡すことを可能にする安全なチャンネルを提供することができます。
メモ: 詳細情報とアイデアについては、仕様のウェブ上のオブジェクト機能モデルの基礎としてのポート(英語)のセクションが役に立つでしょう。
はじめに、Github でいくつかのデモを公開しました。 最初に、ページと埋め込まれた <iframe> の間の非常に単純な単一メッセージ転送を示す、チャンネルメッセージングの基本的なデモをチェックしてください(ライブでも実行してください)。
次に、メインページと IFrame の間で複数のメッセージを送信できる、もう少し複雑な設定を示す、マルチメッセージデモを見てください(ライブで実行)。
ここでは、マルチメッセージデモに焦点を当てます。次のような感じです。
デモのメインページには、 <iframe> に送信するメッセージを入力するためのテキスト入力を含む単純なフォームがあります。 また、 <iframe> から返される確認メッセージを表示するために後で使用する段落もあります。
まず MessageChannel() コンストラクターを使用して新しいメッセージチャンネルを作成します。
IFrame が読み込まれたら、ボタン用の onclick ハンドラーと MessageChannel.port1 用の onmessage ハンドラーを登録します。 最後に、 MessageChannel.port2 をwindow.postMessage メソッドで IFrame に移管します。
iframe.contentWindow.postMessage の行の機能をもう少し詳しく調べてみましょう。 これは次の 3 つの引数を取ります。
ボタンをクリックすると、フォームを通常のように送信せず、テキスト入力に入力された値は MessageChannel を介して IFrame に送信します。
IFrame では、次の JavaScript があります。
初期メッセージを window.postMessage メソッドを介してメインページから受信すると、initPort 関数が実行されます。 これは移管されたポートを保存し、メッセージが MessageChannel を通過するたびに呼び出される onmessage ハンドラーを登録します。
メインページからメッセージを受信したら、リスト項目を作成し、それを順序なしリストに挿入し、リスト項目の textContent をイベントの data 属性と同じ値に設定します(これは実際のメッセージを含みます)。
次に、最初に IFrame に移管された MessageChannel.port2 で MessagePort.postMessage を呼び出して、確認メッセージをメッセージチャンネル経由でメインページに投稿します。
メインページに戻って、 onmessage ハンドラー関数を見てみましょう。
元のメッセージが正常に受信されたことを確認するメッセージが IFrame から返されると、これは単に確認を段落に出力し、テキスト入力を空にして次のメッセージの送信の準備をします。
| HTML # message-channels |
| HTML # message-ports |
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2024年7月28日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.