【问题标题】:execute javascript function in a another iframe when parent is from different domain当父级来自不同域时,在另一个 iframe 中执行 javascript 函数
【发布时间】:2011-03-03 05:52:15
【问题描述】:

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

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

我想在 B.com/page2B.com/page1 上执行 js 函数。 当父级来自同一个域但不在跨域场景中时,以下两个示例都可以正常工作:

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

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

有什么办法吗?

【问题讨论】:

    标签: javascript iframe cross-domain xss


    【解决方案1】:

    代替

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

    使用

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

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

    【讨论】:

    • Sean ,但是 window.window 和 window.window 完全一样。但是 - 我试过这个 parent.window.window.window.frames['if1'].window.window.window.s2(1) 并且它确实有效......(或者你是在谈论遍历其他东西吗?)
    【解决方案2】:

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

    http://easyxdm.net/wp/

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

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

    【讨论】:

      【解决方案3】:

      正如 Aaron 已经告诉您的那样,浏览器不允许这样做,但有一些方法可以绕过它。您需要创建一个小技巧。 Eugene Gladyshev 有一个post on it on his blog

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 只是为了说清楚。虽然这 2 个 iframe 来自同一个域,但它们没有直接的交互方式,因为父级来自不同的域?
        • 不行,因为 iframe 只能通过父框架相互“对话”,而框架不能从不同的域访问父框架。
        • 其实这是不正确的。他只需要把parent.window.frames改成parent.frames
        猜你喜欢
        • 1970-01-01
        • 2012-01-24
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多