2010-09-26 148 views
18

我有一个greasemonkey脚本,它打开一个iframe,其中包含与父页面不同的子域的表单。

我想,当iframe中表单提交后刷新刷新父页面

我在那里我可以执行一个功能的iframe刷新的时候了点,但我不能让那个功能影响父文件。


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

如何做到这将是非常有益的

感谢使用postmessage刷新iframe的父文档

任何意见

回答

47

用途:

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的起源。 (您可以跳过原始验证,只需非常小心您对获取的数据所做的操作)。

+0

请注意,IE不支持'addEventListener',所以使用jQuery绑定或someting – 2013-10-17 03:34:49

+1

如果你有多个iframes在彼此你可以用_top_替换_parent_到达最顶端的页面:'window.top.postMessage(' Hello Parent Frame!','*');' – 2015-01-09 07:04:11