2016-05-31 4 views
3

Я смущен с postMessage и MessageChannel.Застрял в 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 в основном 2-связью трубы. Подумайте об этом как о альтернативе window.postMessage/window.onmessage, но несколько проще и более настраиваемым.

This guide объясняет значение 3 параметра PostMessage в:

объекта, право собственности, которое передается в контекст Принимающий просмотра. В этом случае мы передаем MessageChannel.port2 в IFrame, поэтому его можно использовать для приема сообщения с главной страницы.

P.S. Я считаю, что this guide from Opera немного легче читать, чем Mozilla.

+0

Решил все мое замешательство, спасибо, что поделился! – huachengzan