了解 iframe 中的跨域问题

Posted

技术标签:

【中文标题】了解 iframe 中的跨域问题【英文标题】:Understanding Cross-Domain issue in Iframes 【发布时间】:2012-12-21 06:47:18 【问题描述】:

这个问题可能看起来很傻,但为了清楚起见,我需要理解这一点。

根据我的理解,跨域问题是当包含IFRAME的网页的域与在IFRAME中打开的网页的域不同时。

按照这种逻辑,IFRAME 中不应打开任何内容。

当我在网页“top:9700”的 IFRAME 中嵌入网页“bottom:10700”时,出现错误。我无法看到 IFRAME 中的内容。错误是Access denied in accessing property 'constructor'

我在访问构造函数 (_1.contructor) 时遇到错误

isc.A.Function=function isc_isA_Function(_1)
  if(_1==null) return false;
  if(isc.Browser.isIE&&typeof _1==this.$a7) return true;
  var _2=_1.constructor;
  if(_2&&_2.$k!=null)
    if(_2.$k!=1)return false;
    if(_2===Function)return true
  

当底部的主页在顶部包含的 iframe 中打开时运行此脚本。

有什么办法,我可以做到这一点。我的意思是我可以将两个域设置为相同。我无权访问远程站点的脚本。

在重新渲染一次跨域场景后正在调整框架的大小。如果没有,那么肯定是远程站点正在尝试访问 IFRAME 元素。我该如何调试呢??

【问题讨论】:

并不是说您无法打开域外的网页。完成后您将无法访问它。 就我而言,我的网站网址是“top:9700”。此页面包含一个 IFRAME,其中嵌入了 URL“botton:10700”。我无法看到 iframe 中的内容。错误是“访问属性'构造函数'时访问被拒绝”......为什么它不起作用? Same origin 包括端口和协议 也许你应该问一个包含页面 html 的问题。 我已根据您的 cmets 提供的相关信息更新了您的问题。请更正并添加所需内容。您最初的问题不完整,并且错过了非常相关的信息,例如端口号 【参考方案1】:

跨域问题是关于 iframe 之间的通信。您始终可以嵌入任何 iframe,但如果域不同,则 iframe 无法相互交互,例如执行JS,修改DOM等

HTML5 提供了一个sandbox property,它重新启用了跨域 iframe 交互的特定功能。小心,这可能很危险。

【讨论】:

如果我在显示后(通过代码)调整框架大小,是否视为跨域通信? 不。在最顶层的窗口中调整 DOM 元素的大小。这与任何形式的交流无关。 我发现了问题..问题出在远程站点的脚本中。它试图在框架内对齐。为此,它正在访问框架包含页面的元素...感谢大家帮助我【参考方案2】:

在 abc.com 上托管的 iframe 中加载 xyz.com 页面是正常行为。但是,您不能通过父 abc.com 的代码更改任何内容或访问其内容。

希望这会有所帮助。

【讨论】:

感谢您的回复。我现在明白了。就我而言,我并不想访问任何框架的内容。所以,也许是远程脚本试图访问我的 IFRAME 的包含页面。我该如何调试,正在访问什么并修复它?

以上是关于了解 iframe 中的跨域问题的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地验证 iframe 中的跨域(不包括第三方 cookie)?

iframe的跨域高度自适应(通过跨域页面中嵌套本域页面)

利用 iframe解决ajax的跨域问题

postMessage处理iframe 跨域问题

postMessage处理iframe 跨域问题

Javascript中开启器上的跨域更新哈希