使用postmessage刷新iframe的父文档

ape*_*ure 21 iframe parent cross-domain

我有一个greasemonkey脚本,它打开一个iframe,其中包含来自不同子域的表单作为父页面.

我希望在表单提交后iframe刷新时刷新父页面

我在iframe刷新时可以执行函数,但是我无法使该函数影响父文档.

我明白这是由于浏览器安全模型,我一直在阅读使用postMessage在两个窗口之间进行通信,但我似乎无法弄清楚如何使用它向父级发送重新加载调用.

关于如何做到这一点的任何建议将非常有用,

谢谢

Sco*_*son 54

使用:

window.parent.postMessage('Hello Parent Frame!', '*');
Run Code Online (Sandbox Code Playgroud)

注意'*'表示"任何原点".如果可能,您应该将其替换为目标原点.

在您的父框架中,您需要:

window.addEventListener('message', receiveMessage, false);

function receiveMessage(evt)
{
  if (evt.origin === 'http://my.iframe.org')
  {
    alert("got message: "+evt.data);
  }
}
Run Code Online (Sandbox Code Playgroud)

将"my.iframe.org"替换为iFrame的来源.(您可以跳过原点验证,只需要非常小心您对所获得的数据执行的操作).

  • 如果彼此之间有多个iframe,则可以将_parent_替换为_top_以到达最顶层的页面:`window.top.postMessage('Hello Parent Frame!','*');` (2认同)