【问题标题】:iFrame Automatic SizingiFrame 自动调整大小
【发布时间】:2010-06-25 20:36:47
【问题描述】:

在“打死马”开始之前,让我澄清一下我想做什么,看看是否有人可以帮助我。

我有一个带有 iFrame 的父窗口。 iFrame 中的内容是从一个单独的域加载的,我认为这是我的问题开始的地方,尽管它需要这样。当页面最初加载时,我正在运行以下内容:

<script language="javascript" type="text/javascript">
    var reportFrame = document.getElementById('report');

    function resizeIframe() {
        var height = document.documentElement.clientHeight;

        height -= reportFrame.offsetTop;

        // not sure how to get this dynamically
        height -= 20; /* whatever you set your body bottom margin/padding to be */

        reportFrame.style.height = height + "px";

    }

    reportFrame.onload = resizeIframe;
    window.onresize = resizeIframe;
    
</script>

这很好用。 iFrame 没有任何滚动条,看起来很符合我的要求。我遇到的问题是 iFrame 有一个按钮,会导致框架回发。我需要在 iFrame 重新加载自身时运行此脚本以防止显示任何滚动条。由于子页面位于单独的域上,我无法从它调用函数到父级(很确定这是 XSS 发挥作用的地方)所以我需要想出另一种方式让父级知道它需要运行此脚本,因为 iFrame 正在重新加载自身。

有什么建议吗?

【问题讨论】:

    标签: javascript asp.net iframe dom-events


    【解决方案1】:

    您可以添加一个定期检查和调整大小的计时器:

    setInterval( "resizeIframe()", 1000 ); //check every second
    

    [编辑 - 调整脚本大小的链接]

    查看 http://geekswithblogs.net/rashid/archive/2007/01/13/103518.aspx 和 Resizing an iframe based on content 了解有关调整 iframe 大小的脚本。

    【讨论】:

    • 我想过这个,但不确定性能影响。不过我会试一试!谢谢!
    • 我试过了,但并不高兴 - 我认为这与窗口本身没有改变大小有关,因为它离开了窗口的 clientHeight。还有其他建议吗?
    • 在我的回答中添加了一些链接。计时器应该可以正常工作。甚至可能有 500 毫秒。为了优化它,您可以在每次在父框架上获得 onmouseleave 时启动计时器,并在获得 onmouseenter 时停止它。但不确定您是否真的需要明智的表现。这可能是过早的优化。
    • 带有故障的第二个链接看起来完全符合我的需要。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2011-04-26
    • 2021-06-30
    • 1970-01-01
    • 2014-03-19
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多