【问题标题】:(cross-domain) Call parent function from outside iframe is forbidden(跨域)禁止从 iframe 外部调用父函数
【发布时间】:2015-11-09 21:29:53
【问题描述】:

...但我确实控制了第二个域中的部分 javascript(它集成了 iframe)。 所以,我需要的是一些解决我的问题的方法。我们有example2.com(这个包含iframe)和example.com(这个是原始的,在iframe中)。在 iframe 内,用户单击执行 parent.redirectUser() 的按钮,尽管我在 example2.com 中定义了该函数,但它无法执行,因为它指出该函数禁止从 iframe 内访问。考虑到我可以控制 example2.com 中的 javascript,有没有其他方法可以解决这种情况?非常感谢您的帮助...

【问题讨论】:

    标签: javascript html iframe


    【解决方案1】:

    是的,你可以做到。 您可以使用消息技术, 从孩子(example2.com)发送消息:

    parent.postMessage("Ok", "example.com");
    

    在 parent(example.com) 中,您必须添加以下代码:

        //add eventlistener for message event
        if (window.addEventListener) {
            window.addEventListener("message", listener);
        } else {
            // IE8
            window.attachEvent("onmessage", listener);
        }
        function listener(event) {
    //check the message trust or not?
            if (event.data == "Ok") {
    //from parent you can call function, but function must be placed in global scope
                redirectUser();
            }
        }
    

    【讨论】:

    • 我不明白这个术语“开瓶器”是如何工作的……我是从 iframe 中调用那条线的,对吧?那我到底应该在“opener”里面放什么?
    • opener 是父窗口,是的,您从 iframe 调用的那一行,并且必须将代码与 eventlistener 一起放入 opener 窗口。
    • 类似opener = getParentContainer()?
    • opener 是一个全局变量放置在窗口中,引用父窗口。
    • 请阅读w3schools.com/jsref/prop_win_opener.asp opener 属性返回对创建窗口的窗口的引用。使用 window.open() 方法打开窗口时,您可以使用目标窗口中的此属性返回源(父)窗口的详细信息。
    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 2013-04-01
    • 2011-07-05
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多