从父窗口访问Iframe变量

时间:2018-04-19 08:34:44

标签: javascript iframe cross-domain

我在网址https://parent.com有一个网页,并在其中注入了一个iframe,内容为https://iframe.com。 iframe有一个名为iframe_variable的全局变量。我想从iframe_variable文档访问parent

我知道浏览器不允许跨源通信,并且它们提供了postMessage API来安全地进行通信。

约束:我无法访问任何parentiframe代码。

在浏览器控制台上,我想以某种方式访问​​iframe_variable

我尝试了以下内容:

  1. 首先获取iframe的参考。

    var iframe = document.getElementsByTagName('iframe')[0]; // There is only one iframe on document

  2. message窗口发布的parent事件创建一个侦听器。

    var iframeListener = function(e) { console.log("Got message from parent"); e.source.postMessage(JSON.stringify({'IFRAME_VARIABLE': window.IFRAME_VARIABLE})); }

  3. 为父窗口创建一个侦听器,以接受从iframe发布的“消息”。

    parentListener = function(e) { console.log('Got message from iframe'); var data = JSON.parse(e.data); window.VARIABLE = data.IFRAME_VARIABLE; }

  4. parent_listener附加到message事件。

    window.addEventListener('message', parentListener, false);

  5. 现在,如果我尝试从iframeparent发送消息,如下所示:

    iframe.contentWindow.postMessage('test message', '*')
    

    它不会触发'iframeListener'。原因是它未在iframe中针对message事件进行注册。

    当我在parent.com时,我认为我甚至无法通过浏览器控制台执行此操作,因为任何尝试执行iframe.contentWindow.addEventListener都会导致错误,因为它将尝试访问不同的领域。

    有解决方法吗?在我的理解和研究中是否有任何我缺失的东西。

    P.S:为简单起见,我没有写原点检查。我知道我必须检查发布消息的来源。不这样做会留下巨大的安全漏洞。

0 个答案:

没有答案