如何根据 iframe 中的动态内容更改 iframe 的高度?

Posted

技术标签:

【中文标题】如何根据 iframe 中的动态内容更改 iframe 的高度?【英文标题】:How to change height of iframe based on dynamic conent within the iframe? 【发布时间】:2012-01-06 22:43:22 【问题描述】:

我有一个包含动态内容的 iframe。如果回答特定问题,则会显示附加信息(隐藏的 div 变为可见)。我想扩大 iframe 的高度。我知道这个问题已经在这里被问过很多次了,但似乎它通常是在 iframe 中的不同页面被加载时,而不是在 iframe 中动态更改内容时。

这是我尝试使用 jsFiddle 整理的示例:

iframe:http://jsfiddle.net/B4AKc/2/

页面:http://jsfiddle.net/PmBrd/

有什么想法吗?

【问题讨论】:

这仍然是一个棘手的问题。这是关于 SO 的最佳答案:***.com/questions/153152/… iframe 中的内容是否与包含 iframe 的页面在同一个域中? 同一个域?该死的,我以为我得到了一个快速、简单的答案! 【参考方案1】:

这对你有用吗?

http://jsfiddle.net/PmBrd/1/

代码:

var iframe = document.getElementById("ifr").contentWindow;

iframe.$(".toggle_div").bind("change", function () 
    $("#ifr").css(
        height: iframe.$("body").outerHeight()
    );
);

由于您提到它们在同一个域中,因此只需对您的真实应用执行类似操作即可。

【讨论】:

【参考方案2】:

看看 jQuery postMessage 插件。它允许您将信息从子框架传递给父框架。您可以更改子框架内的代码,以便在内容更改时将内容高度发布给父级,然后父级可以使用它来相应地调整 iframe 的大小。

两个页面必须在同一个域中才能工作。

我希望这会有所帮助!

【讨论】:

【参考方案3】:

Esailija 的回答效果很好,但这更好 imo。

$('#ifr').contents($(".toggle_div")).bind("change", function () 
    $("#ifr").height($("#ifr").contents().find("html").height());
);

【讨论】:

【参考方案4】:

检查这个。 您可以使用 javascript 本身获取 iframe 大小。 使用 setInterval,每次检查窗口高度。

< iframe src='<YOUR_URL>' frameborder='0' scrolling='no' id='frame_id' style='overflow:hidden; width:984px;' >
</iframe>

<script language="javascript" type="text/javascript">
setInterval(function()
    document.getElementById("frame_id").style.height = document.getElementById("frmid").contentWindow.document.body.scrollHeight + 'px';
,1000)
</script>

Check this

【讨论】:

【参考方案5】:

可能有点晚了,因为所有其他答案都来自 2011 年 :-) 但是...... 这是我的解决方案。在实际 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
        );
    );
);

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

【讨论】:

以上是关于如何根据 iframe 中的动态内容更改 iframe 的高度?的主要内容,如果未能解决你的问题,请参考以下文章

根据内容动态调整 iframe 高度

根据内部更改的内容动态调整 jQuery Fancybox 的 iframe 高度

如何根据元素高度动态调整 iframe 高度?

如何根据内容动态设置iframe高度[重复]

当我在 iframe 中编辑时,如何自动更改 Html 页面的内容

jsp中父页面如何调用iframe中的src子页面中的js方法