2016-05-31 7 views
3

私はpostMessageMessageChannelと混同しています。ここでpostMessageとMessageChannelでスタック

MDNからいくつかのコードです:

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; 
} 

私はpostMessage方法だけ引数、それはを取ることができることを示す上記のコードを取ることができます思ったが、第三については何もありません引数のpostMessageメソッド。

だから私の質問があります

  1. postMessageメソッドの第三引数の意味は何ですか?

  2. はなぜ/とき、我々はMessageChannelを使用する必要があり、私はMessageChannelの使い方を知っているが、無用のようですか?

答えて

3

MessageChannelは基本的に双方向通信パイプです。それをwindow.postMessage/window.onmessageの代わりに考えることもできますが、やや簡単で設定可能です。

This guideはのpostMessageの3番目のパラメータの意味を説明しています

オブジェクト、受信ブラウジング・コンテキストに転送されるの所有権を。この場合、MessageChannel.port2をIFrameに転送するので、メインページからメッセージを受信するために使用できます。

P.S.私はthis guide from OperaがMozillaよりも少し読みやすくなっています。

+0

私のすべての混乱を解決しました。共にありがとう! – huachengzan

関連する問題