【问题标题】:Resizing cross-domain iframe调整跨域 iframe 的大小
【发布时间】:2011-01-18 18:49:23
【问题描述】:

我听说可以轮询 iframe 的 url 以获取来自父级的哈希值。我需要做的是动态设置跨域 iframe 的高度。因此,每当高度发生变化时,iframe 都会将其 url 设置为 someurl#height。现在我需要从父级访问哈希(#height),但它仍然不允许我。在这种情况下,不能使用代理(iframe 内的 iframe)。也许我做错了什么,你将如何轮询 iframe 的 url?

iframe.contentWindow.location.href - 安全警报 iframe.src - 返回不带哈希的 url

【问题讨论】:

标签: javascript iframe


【解决方案1】:

通常不是这样的。应该做的,是iframe调用window.parent.location = "#<iframe height>";,设置parent有iframe高度的hash值。

父页面使用onhashchange 事件(IE、Firefox)来捕获更改,然后设置 iframe 的高度或每隔 100 毫秒左右检查一次哈希值的计时器。至少,Google CSE 就是这样做的。

另请参阅我对类似问题的回答:

Handle URL anchor change event in js

【讨论】:

  • 但是如果父级在另一个域上,iframe 是否能够访问 window.parent?这不是同样的安全问题吗?
  • 我刚刚检查过,您的解决方案确实有效,但是......您怎么能做到这一点?为什么这不是安全违规?
  • @Marius:您只是更改了父页面的位置,您没有访问任何数据或任何东西,这并不是真正的安全问题。它可能被认为是可用性问题(未经同意更改父页面等),但实际上它起作用的原因是避免安全问题;如果他们不想被陷害,这就是网站摆脱被陷害的方式 - 他们只是设置top.location = window.location;
  • 某些属性不受跨域策略的约束。 location 就是其中之一。
  • 谢谢。不幸的是,这个解决方案只适用于 Opera。 Firefox 和 IE 发疯了! IE 重定向到 iframe 的 url 和 firefox ...哇,我什至不知道它做了什么;] 我怎么能解决这个问题? :(
猜你喜欢
  • 2011-08-20
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多