我希望实现双向握手,即:
- 父窗口将比iframe更快地加载
- iframe应该在准备就绪后立即与父窗口通信
- 父窗口已准备好接收iframe消息并回复
此代码用于使用[CSS自定义属性]设置iframe中的白标签。
代码:
iframe
$(function() {
window.onload = function() {
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);
}
window.addEventListener('message', receiveMessage);
parent.postMessage("GetWhiteLabel","*");
}
});
父级
$(function() {
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
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进行跨域消息传递]
window.postMessage()
窗口.postMessage() - sideshowbarkerwindow.postMessage()
,但在尝试访问目标窗口中的event.source
时仍然遇到了 OP 提到的错误。 - Leslie Krause