HTML5 интерфейс postMessage не очень хорош. Я предлагаю интуитивно понятный. Вы можете скачать его с моего сайта:
http://www.jackiszhp.info/tech/postMSG.html
window.MSG.post (msgname, msgdata, arrayOfDomainTarget, arrayOfWindowIDTarget)
это «окно» может быть опущено, не похожее на указанное в HTML5
там вам нужен объект окна.
Здесь нет. это «окно» просто указывает, что MSG находится в глобальном пространстве.
msgname - имя категории сообщений.
msgdata - это объект JSON. он будет зачеркнут перед постом
arrayOfDomainTarget, arrayOfWindowIDTarget
Я использую логическое И. изначально это было ИЛИ
позже я изменил его на И. более подходящий. Похоже.
и я позволю "*" быть подстановочным знаком для всех windowID.
информация о вызывающем абоненте вообще отсутствует в параметре
так как браузер знает всю информацию.
поэтому мы видим, что этот метод не позволяет отправителю обмануть получателя.
отправитель просто позвонит следующим образом.
window.name="myWindowID";
MSG.post("cmd",{what:'do thing abc',parameter:'the value of a parameter'},["jackiszhp.info"],[*]);
для приемника, 2 вещи.
//#1 define the message handler
function messageHandler(e){
var obj=JSON.parse(e.detail);
obj.name is the msgname = 'cmd'
obj.data is the msgdata = {what:'fuck',who:'not to tell'};
obj.source is the sender
obj.source.href is the sender's window.location.href
obj.source.WID is the sender's window.name="myWindowID";
obj.target is the target of this event
obj.target.domains is the target domains of this event
obj.target.WIDs is the target WIDs of this event
....
}
//#2 register the message handler
window.addEventListener(msgname, messageHandler,false);
or
document.addEventListener(msgname, messageHandler,false);
//to respond,
window.name="hereMywindowID";
MSG.post("cmd",{what:'do thing def',parameter:'the value of a parameter'},["jackiszhp.info"],['myWindowID']);
//clearly, we can see that this response only the original sender can receive it.
//unless in the target domain, accidently, there are two windows with same ID "myWindowID".
Дополнительное примечание:
B. Я надеюсь, что Mozilla сможет взять мой интерфейс и включить его в Firefox.