IFrame到IFrame的通信

时间:2011-07-12 05:28:02

标签: javascript html iframe

通过JavaScript进行IFrame IFrame通信是否有任何方法

6 个答案:

答案 0 :(得分:3)

如果iFrame共享相同的域来源,您可以直接从另一个iFrame中调用Javascript或读/写变量。您将获得iFrame对象并从中获取Web页面的窗口对象。

如果iFrame没有相同的来源,那么现代浏览器将阻止您与普通的javascript通信。传递信息的唯一方法是使用消息传递,这是一种相对较新的浏览器功能,需要在两个iFrame的代码之间进行预先合作。

答案 1 :(得分:2)

正如jfriend00所说,你不能跨域调用javascript。这会违反Same Origin Policy

HTML5的一项新功能是postMessage。这允许您向iframe发送消息。然后,它需要iframe内容上的消息监听器来处理您的消息。

答案 2 :(得分:1)

答案 3 :(得分:1)

如其他答案中所述,在iframe和父文档之间进行通信有几种不同的方式,但需要控制iframe文档。 (postmessage等)然而,似乎这将很快变得容易,因为webkit已经为iframe实现了新的属性 - 一个控制这种行为并且特别允许删除iframe限制 - 即相同的域。虽然有趣的是它唯一的html5 / webkit,但显示了iframes http://www.w3schools.com/html5/att_iframe_sandbox.asp

的未来可能性的承诺

答案 4 :(得分:1)

我们可以通过使用dojo库dojox来实​​现iframe之间的通信方式dojox.cometd

使用此功能,我们可以将每个javascript函数推送到另一个iframe或其他页面。

我们可以使用不同的浏览器或iframe在不同的计算机之间使用相同的域进行通信,但其局限性是我们无法使用不同的域进行通信。

答案 5 :(得分:1)

如果你需要的是将值从一个iFrame传递给另一个iFrame,你可以通过在父iFrame中设置一个隐藏字段,然后从子节点访问它来实现:

这将是这样的:

父母的

var input = document.createElement("input" );
input.setAttribute( "type", "hidden" );
input.setAttribute( "id", "combinationType" );
input.setAttribute( "value", "very cool!!!" );
document.getElementsByTagName( 'div')[0].appendChild(input);

在孩子:

var val = window.parent.document.getElementById('combinationType').value;

我希望它有所帮助。