我有一个页面可以打开子窗口(具有iframe),并且从新页面开始,我要调用Parent函数将一些值从Child传递到父窗口。
子窗口代码:
window.opener.ParentFunction(sendvalues);
由于两者都在同一个域(example.com)中,所以对我来说很好。
现在,由于某些更改,我需要将子窗口移到新域(new.example.com)。我也没有收到“权限拒绝”错误。
为了解决这个问题,我正在使用PostMessage。
子窗口代码:
window.parent.postMessage(sendvalues,"*");
父代码:
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
//for debug
alert(e.data);
ParentFunction(e.data);
}, false);
这对我没有用,我没有任何价值。没有错误,没有任何反应。
该代码未在eventer方法中执行。我没有收到任何警报。
任何帮助是极大的赞赏。
最佳答案
根据新信息,您应该致电:
如果子级和iframe位于同一域中
window.parent.opener.postMessage
如果父级和子级位于同一域中,而iframe不在同一域中,则iframe可能需要调用
window.parent.postMessage
然后,子窗口应使用以下方法侦听并将消息传递给父窗口:
window.opener.postMessage
不过,在这种情况下,您仍然可以尝试window.parent.opener.postMessage-我不会为您测试所有内容;)