var channel = new MessageChannel();まず、MessageChannelオブジェクトを作成します。これは、引数なしのコンストラクタ関数を呼び出して作るだけです。
《MessageChannel》.port1.addEventListener('message', 関数 );このMessageChannelには、2つのポートがあります。「port1」と「port2」です。これが、送受する2つの入り口になります。これらのプロパティには「MessagePort」というオブジェクトが設定されています。このMessagePortの「onmessage」イベントに、このMessageChannelで向こう側のポートから何かメッセージが送られてきた時の処理を用意しておきます。
《MessageChannel》.port1.start();onmessageイベントを設定したほうのポート(ここではport1)の「start」を呼び出します。これで、このport1にメッセージが届いたら、onmessageの関数が呼び出されるようになります。
《Window》.postMessage( 値l , オリジン ,《MessagePort》);postMessageでメッセージを送信します。第3引数に、送信先となるMessagePortを指定すると、そのポートに送信先のウインドウを設定してメッセージが送られます。注意すべきは、「ここで指定するポートは、先ほどonmessageを指定したポートではないほうを指定する」という点です。同じポートを指定してはダメです。
window.addEventListener('message', 関数 );まず、onmessageイベントを受け付けるように関数を設定します。これは、通常のonmessageイベント処理と全く同じです。
変数 = 《MessageEvent》.data;onmessageイベントが発生したときに呼び出される関数では、引数で渡されるMessageEventオブジェクトを利用してイベントに関する情報を受け取ります。送信された値の取得は、通常と同じで「data」プロパティから取り出せます。
変数= event.ports[0];MessageEventには、値と一緒に渡されるMessagePortが「ports」プロパティにまとめられています。これは複数のポートを受け取れるよう配列になっています。ここに、送信側でpostMessageするときに引数に指定したMessagePortオブジェクトが保管されています。通常は複数MessagePortが送られることはないでしょうから、このports[0]に保管されているMessagePortを取り出して利用すればいいでしょう。
《MessagePort》.postMessage(msg);メッセージの返送は、event.target.postMessageを使いません。取り出したMessagePortの「postMessage」を使います。これは引数にオリジンを指定する必要がありません。なにしろ、このポートから送信すれば、もう一方のポートに送られることはわかっているんですから。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
<< 前へ | 次へ >> |