【问题标题】:Accessing parent document from IFrame (same domain) giving error从 IFrame(相同域)访问父文档给出错误
【发布时间】:2019-05-13 13:33:54
【问题描述】:

我正在尝试使用 window.parent.document 从 iframe 访问父文档,但出现此错误 -

Uncaught DOMException: Blocked a frame with origin "https://abc.xyz.com" from accessing a cross-origin frame.

但是 parent 和 iframe 的主机是相同的。 两者都有主机https://abc.xyz.com

在 iframe 中,我通过几个 URL 重定向它。所以从

开始

https://abc.xyz.com 然后去

https://www.facebook.com

然后再次重定向到 https://abc.xyz.com

我尝试在此重定向后访问文档,但收到此错误。 关于为什么会发生这种情况的任何想法?请帮忙。

【问题讨论】:

  • https://abc.xyz.com -> https://www.facebook.com = 跨域...不过我可能没抓住重点?!
  • 在 iframe 再次从 www.facebook.com 重定向到 abc.xyz.com 后,我正在访问父文档
  • 访问父文档时,iframe 上的src 的值是多少?更清洁的解决方案是使用 postMessage。
  • 当我尝试访问父文档时我的 iframe 的 src 是 - https://abc.xyz.com/addCards
  • 嗯,这确实很奇怪。也许有一些缓存正在让它变成泡菜?抱歉,我无法提供更多帮助。

标签: javascript html iframe url-redirection


【解决方案1】:

您可以使用postMessage(阅读更多信息here)。

在你的 iframe 中调用这个:

window.parent.postMessage({message: 'stuff you want to send'}, 'https://abc.xyz.com/');

在父窗口中你可以像这样监听消息事件:

window.addEventListener('message', function(evt) {
   if(evt.origin == 'https://abc.xyz.com/')
       console.log('Data: ' + evt.data.message);
}, false);

【讨论】:

  • 是的,我可以使用 postMessage。我只是想知道为什么我无法访问父母的文档,即使经过一系列重定向后我现在回到了与父母相同的域
  • 因为浏览器试图更好地保护过度而不是保护不足。 (不知道确切的技术原因)。
猜你喜欢
  • 2013-10-28
  • 2012-09-04
  • 2011-02-09
  • 2012-04-05
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多