AutoHeight IFrame

时间:2009-10-13 11:10:47

标签: jquery height

我想创建一个从其他页面加载页面的iframe页面 现场。我尝试了“jQuery iFrame Sizing”来设置自动高度 iframe ......但它失败了。

问题是什么......?

这是我的代码:

on Head:
<script type="text/javascript" src="js/jquery.js" ></ script >
<script type="text/javascript" src="js/iframe.js"></script >

on Body:
<iframe scrolling="no" frameborder="0" width="1025" src="http://mydomain.com"/>
</iframe>

5 个答案:

答案 0 :(得分:4)

是的,由于浏览器的安全限制,Javascript无法访问从另一个域加载的iframe源。然而,有一个解决方法,不是理想的,但它的工作原理。

您可以使用一个简单的本地脚本“智取”浏览器,该脚本将加载并输出mydomain.com的内容。然后将iframe src指向此脚本。在这种情况下,浏览器会认为您正在处理相同的域,并且限制将不适用。

所以不要这样:

<iframe scrolling="no" frameborder="0" width="1025" src="http://mydomain.com" />

您可以尝试这样的事情:

<iframe scrolling="no" frameborder="0" width="1025" src="/local-script.php?url=http%3A%2F%2Fmydomain.com" />

然后你可以在local-script.php中添加一个简单的逻辑来加载你想要的域/文档的内容,一切都应该没问题。 LMK,如果你需要一个PHP脚本的例子。

答案 1 :(得分:1)

这是可能的,但不是直截了当的。我知道Shindig opensocial容器做了类似的事情。托管在iframe中的小工具可以请求容器动态调整iframe大小以响应iframe内小工具内容的更改。

处理此问题的代码位于dynamic-height.jsdynamic-height-util.js的shindig svn repo中。

希望你可以从那里提取可用的东西。

答案 2 :(得分:0)

来自original site的前两行:

  

注意:由于浏览器安全性   与跨站点相关的限制   脚本,此解决方案仅适用   iframe页面内容从同一个域调用

答案 3 :(得分:0)

可能有点晚了,因为所有其他答案都比较旧:-)但是......这是我的解决方案。在实际的FF,Chrome和Safari 5.0中进行了测试

$(document).ready(function(){
    $("iframe").load( function () {
        var c = (this.contentWindow || this.contentDocument);
        if (c.document) d = c.document;
        var ih = $(d).outerHeight();
        var iw = $(d).outerWidth();
        $(this).css({
            height: ih,
            width: iw
        });
    });
});

希望这对任何人都有帮助。

答案 4 :(得分:0)

好的我的解决方案是将iframe设置为其内容,考虑到您有交叉访问权限,或者如果没有,您可以在您的php文件中添加此标题:

header("Access-Control-Allow-Origin: *");

所以调整大小的JS代码就是这个:

function resizeFrame(f) {
     var size = f.contentWindow.frameElement.clientHeight;
     f.style.height = size + "px";              
     }

然后调用resizeFrame(id reference)