JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

HTML5のチャネルメッセージングで実現するブラウジングコンテキスト間の双方向通信


チャネルメッセージングとは

ブラウジングコンテキスト間で双方向の通信を行う仕組みは「チャネルメッセージング」と呼ばれます。この機能は、異なるオリジン(ドメイン)間の通信にも利用できるため、クロスオリジン環境での安全なデータ交換に非常に役立ちます。

MessageChannelの仕組み

MessageChannel を生成すると、内部で自動的に2つのポートが作成されます。片方のポートからデータを送信すると、もう片方のポートを経由して別のブラウジングコンテキストへとデータが転送される仕組みです。

主なメソッド

  • postMessage() − チャネルを介してメッセージを送信します
  • start() − ポートでのデータ送受信を開始します
  • close() − ポートを閉じて通信を終了します

実装例:iframe間でのデータ送信

次のコード例では、ある iframe から別の iframe へデータを送信しています。読み込み完了時にハンドラ関数が呼び出され、MessageChannel の生成、親ウィンドウへのポート転送、メッセージ受信時のアラート表示までを一連の流れとして実装しています。

var loadHandler = function(){
    var mc, portMessageHandler;
    mc = new MessageChannel();
    window.parent.postMessage('documentAHasLoaded','https://foo.example',[mc.port2]);
    portMessageHandler = function(portMsgEvent){
        alert( portMsgEvent.data );
    }
    mc.port1.addEventListener('message', portMessageHandler, false);
    mc.port1.start();
}
window.addEventListener('DOMContentLoaded', loadHandler, false);

この例では、DOMContentLoaded イベントをトリガーに loadHandler が実行され、port1 側でメッセージリスナーを登録したうえで通信を開始します。一方、port2postMessage() の第3引数として配列形式で親ウィンドウへ転送されており、これにより2つのコンテキスト間に独立した通信チャネルが確立されます。


  1. APFSとHFS+の違いとは?データ復旧の観点から徹底比較

    Macユーザーなら一度は耳にする「APFS」と「HFS+」。この2つのファイルシステムには、いったいどのような違いがあるのでしょうか。APFSはApple File System(アップルファイルシステム)、HFSはHierarchical File System(階層型ファイルシステム)を指します。APFSは、技術面およびデータ復旧の面で新たな進化をもたらしました。 本記事では、APFSとHFS+の違いについて詳しく解説します。まずAPFS(Apple File System)とは何かを説明し、続いてHFSおよびHFS+(Mac OS拡張フォーマット)の概要をご紹介します。そのうえで、両者の

  2. LiFi(ライファイ)とは?LEDの光でデータを送る次世代通信技術の仕組みとWi-Fiとの違い

    お宅の中を見渡してみてください。ほぼすべての電子機器・電気製品に共通して備わっているものは何でしょうか?そう、「インターネット接続」です。では、モバイルネットワークやWi-Fiルーターと同じように、あのLED照明でも通信ができるとしたらどうでしょう?信じられないかもしれませんが、これは実在する驚くべき技術なのです。 この技術は、「光無線通信(Optical Wireless Communication)」というカテゴリーに属する新しい通信方式です。光無線通信とは、光ファイバーなどのケーブルを使わずに光で通信を行う方式すべてを指します。 可視光通信(VLC)とは LEDライトを使ったデータ転送・