如何让两个iFrame相互通话? 例如,我是第二个iframe的元素值,第一个iframe上有显示元素。我需要从第2帧到第1帧获得值。我该怎么做? 不要说使用cookies,因为大量的数据会伤害你。
答案 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
等访问该对象