如何动态调整我的iframe大小,避免浏览器安全跨域限制?

时间:2010-12-21 01:58:05

标签: javascript security dom iframe cross-domain

我们有一个可嵌入的徽章,用于创建iframe。它需要是一个动态的大小;它根据从第三方API或我们的数据库加载的数据更改大小。所以不知道它加载前的高度。

使用从我们的服务器加载脚本的标记来调用它,这会创建一个设置为特定src的iframe。

在我自己的机器上,在我可以做的iframe中

window.parent.document.getElementById('my_frame').style.height=new_calculated_height+'px';

但当然,当它嵌入在不同于iframe src的页面中时,由于跨域限制(FF中的“不安全访问尝试”错误等)而失败。

由于我们已经将脚本加载到具有完全访问权限的主机页面中,这有点愚蠢。

基本上,我需要从iframe到主页中获取一个新的高度变量。

我可以反过来做吗?在主页上有一个函数询问iframe是否为元素的offsetHeight?

3 个答案:

答案 0 :(得分:7)

这对于在浏览器中工作非常困难。

我强烈建议您使用easyXDM(http://easyxdm.net/)。它是一个JavaScript库,它在现代浏览器上使用PostMessage传输,并在旧浏览器上使用一些JavaScript忍者。

该库允许您在Iframe与其父级之间进行通信,即使它们不在同一个域中。

图书馆一直支持IE6!

编辑:实际上有一个示例可以在加载内容后动态调整Iframe的高度:http://easyxdm.net/wp/2010/03/17/resize-iframe-based-on-content/

  • 基督教

答案 1 :(得分:0)

虽然我对这种情况没有特别的经验但引用以下内容不会有害:Cross Domain Iframe Resize

答案 2 :(得分:0)

根据您尝试加载的页面的简单性,您可以尝试使用PHP加载它并在构建HTML时暴露一些变量(如果这甚至是一个选项,当然)。

例如,您可以使用file_get_contents加载它,使用一些正则表达式来查找img的宽度和高度,然后在回显iframe时使用这些值。