使用postmessage刷新iframe的父文档

28

我有一个Greasemonkey脚本,它会打开一个iframe并将一个不同子域中的表单加载到该iframe中。

当iframe提交表单后刷新时,我希望刷新父页面。

我已经可以在iframe刷新时执行一个函数,但我无法让该函数影响父文档。

我理解这是由于浏览器安全模型所致,并且一直在研究使用postMessage在两个窗口之间通信,但我似乎无法弄清楚如何使用它向父级发送重新加载调用。

对于如何完成这个任务的任何建议都将非常有帮助

谢谢

1个回答

67

使用:

window.parent.postMessage('Hello Parent Frame!', '*');

请注意 '*' 表示“任意来源”。如果可能,请将其替换为目标来源。

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

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

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

将“my.iframe.org”替换为您的iFrame来源。 (您可以跳过源验证,但一定要非常小心处理获取的数据)。


请注意,IE不支持“addEventListener”,因此请使用jQuery绑定或类似方法。 - Matthew Lock
4
如果您有多个嵌套的 iframe,您可以将“_parent_”替换为“_top_”以访问最顶层的页面:window.top.postMessage('Hello Parent Frame!', '*'); - rlv-dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接