当父来自不同的域时,在另一个iframe中执行javascript函数

时间:2010-06-13 15:30:41

标签: javascript iframe cross-domain xss

页面 A.com 有2个iframe B.com/page1 B.com/page2 。 这是A.com的代码:

<html><body>
    <iframe src="b.com/page1" name="iframe1" id="iframe1">
    <iframe src="b.com/page2">
</body></html>

我想从 B.com/page2 B.com/page1 上执行js功能。 当父级来自同一域而不是跨域方案时,以下两个示例都很有效:

parent.window.frames['iframe1'].SomeFunction(args);

parent.document.getElementById('iframe1').contentWindow.SomeFunction(args);

有什么办法吗?

4 个答案:

答案 0 :(得分:8)

而不是

parent.window.frames['iframe1'].SomeFunction(args);

使用

parent.frames['iframe1'].SomeFunction(args);

您可以遍历可以引用的任何窗口的frames集合,但在这种情况下,您试图遍历window的递归parent属性(这是窗口)。这是不允许的。

答案 1 :(得分:2)

不,浏览器不允许根本不在同一个域的iframe之间进行交互。

答案 2 :(得分:0)

正如Aaron已经告诉过你的那样,浏览器不允许这样做,但是有很多方法可以解决它。你需要创建一个小黑客。 Eugene Gladyshev有post on it on his blog

答案 3 :(得分:0)

正如Aaron所说,不允许在iframe之间进行交互,但你应该看一下easyXDM,它有助于javascript中的跨域通信:

http://easyxdm.net/wp/

以下是您可能正在寻找的示例:

http://easyxdm.net/wp/2010/03/17/sending-and-receiving-messages/