iFrames之间的沟通?

时间:2013-05-20 20:00:44

标签: javascript html iframe

如何让两个iFrame相互通话? 例如,我是第二个iframe的元素值,第一个iframe上有显示元素。我需要从第2帧到第1帧获得值。我该怎么做? 不要说使用cookies,因为大量的数据会伤害你。

3 个答案:

答案 0 :(得分:22)

如果<iframe>元素来自同一个域,则他们可以直接相互访问。例如,在iframe1中你可以这样做:

document.getElementById('someDiv').innerHTML = 
    top.document.getElementById('otherIframe').contentWindow.
    document.getElementById('someOtherDiv').innerHTML;

答案 1 :(得分:5)

首先我会警告你,你需要为两个iframe提供完整的代码修改功能。 iframe受到严格的安全处理;否则,我可以创建一个域名“bunkofamerica.com”,将“bankofamerica.com”放在iframe中,然后在键入时分析用户的密码。 (无论如何,银行倾向于使用iframe破坏代码,但仍然......)

您正在寻找这种原生功能: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

这是我公司用来使这种跨浏览器兼容的github库:https://github.com/daepark/postmessage

jbabey是正确的,如果iframe在同一个域和协议中,那么它就更容易了。

Opera Docs用最相关的示例https://dev.opera.com/articles/window-postmessage-messagechannel/#channel

解释了这一点

答案 2 :(得分:0)

首先,框架可以在其自身之外进行交互的唯一方式是,如果两个地方加载的内容来自同一个域,否则您将收到CORS错误。

假设这是所有的肉汁,我会在父框架的窗口对象上创建一个管理器对象。

window.Mgmt = {
    frame1: $('iframe#frame1'),
    frame2: $('iframe#frame2')
}

然后在任何一个iframe中,你应该能够使用window.parent.Mgmt.frame1等访问该对象