Для меня я хотел реализовать двухстороннее рукопожатие, то есть: - родительское окно будет загружаться быстрее iframe - iframe должен поговорить с родительским окном, как только он будет готов - родитель готов получить iframe message и replay
этот код используется для установки белой метки в iframe с использованием [CSS custom property] кода: iframe
$(function() {
window.onload = function() {
// create listener
function receiveMessage(e) {
document.documentElement.style.setProperty('--header_bg', e.data.wl.header_bg);
document.documentElement.style.setProperty('--header_text', e.data.wl.header_text);
document.documentElement.style.setProperty('--button_bg', e.data.wl.button_bg);
//alert(e.data.data.header_bg);
}
window.addEventListener('message', receiveMessage);
// call parent
parent.postMessage("GetWhiteLabel","*");
}
});
parent
$(function() {
// create listener
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
// replay to child (iframe)
document.getElementById('wrapper-iframe').contentWindow.postMessage(
{
event_id: 'white_label_message',
wl: {
header_bg: $('#Header').css('background-color'),
header_text: $('#Header .HoverMenu a').css('color'),
button_bg: $('#Header .HoverMenu a').css('background-color')
}
},
'*'
);
}, false);
});
Естественно, вы можете ограничить исход и текст, это легко работать с кодом. Я нашел этот пример полезным: [Междоменные сообщения с postMessage]
NSInvocation является классом для оборачивания вызовы метода в объекте. Можно установить селектор (сигнатура метода), установить аргументы индексом. Можно затем поставить цель, и вызов вызывают, чтобы инициировать вызов, или оставить целевой сброс и использовать invokeWithTarget: в каком-то цикле для вызова этого на многих объектах.
я думаю, что это работает немного как это:
NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:@selector(foo:bar:)];
[inv setArgument:123 atIndex:0];
[inv setArgument:456 atIndex:1];
for (MyClass *myObj in myObjects) {
[inv invokeWithTarget:myObj];
}
Или если Вы не хотите передавать объекты вызова в этот метод, можно использовать тип SEL для принятия селектора (сигнатура метода).
-(void)fooWithMethod:(SEL)selector;
Затем присваивают селектор объекту вызова для вызова его на объектах.
Или если Вы используете эти fooWithMethod:(SEL)selector
подход, просто сделайте [myObject performSelector:selector]
на нем, если он не имеет никаких других аргументов.
См. NSObject для деталей .