2009-03-02 142 views
4

我可以看到这个问题已被多次提出,但没有一个建议的解决方案似乎适用于我正在构建的站点,因此我正在重新打开该线程。我试图根据内容的高度来设置iframe的大小。包含iframe的页面和它的源页面都存在于同一个域中。动态调整iframe的大小

我在以下每个线程试图提出的解决方案:

我认为,解决上述不工作,因为当提及身体.clientHeight制作完成后,浏览器并未真正确定文档的高度。

这里是我使用的代码:

var ifmBlue = document.getElementById("ifmBlue"); 
    ifmBlue.onload = resizeIframe; 

    function resizeIframe() 
    { 
     var ifmBlue = document.getElementById("ifmBluePill"); 
     var ifmDiv = ifmBlue.contentDocument.getElementById("main"); 
     var height = ifmDiv.clientHeight; 
     ifmBlue.style.height = (ifmBlue.contentDocument.body.scrollHeight || ifmBlue.contentDocument.body.offsetHeight || ifmBlue.contentDocument.body.parentNode.clientHeight || height || 500) + 5 + 'px'; 
    } 

如果我用火调试调试脚本时,iframe.contentDocument的主要div的客户高度为0。另外,body.offsetHieght,&体。 scrollHeight是0.然而,在脚本运行完成后,如果我检查HTML iframe元素的DOM(使用fire debug),我可以看到body的clientHeight是456,内部div的clientHeight是742.这让我相信这些值在iframe.onload被触发时尚未设置。所以,根据上面的每个线程,我将代码移动到iframe源页面的body.onload事件处理程序中。该解决方案也没有工作。

任何帮助,你可以提供非常感谢。

感谢,

CJ

回答

3

DynamicDrive有such a script,我认为这是你要求的。

现在还有一个newer version


2011更新:

我会强烈建议使用AJAX过这样的事情,特别是考虑到一个动态调整的iframe仅通过同一领域的作品。

即使如此,这是一个有点玄乎,所以如果你绝对必须使用AJAX超过标准的页面加载,你真的,真的应该使用的东西,像history.pushState(并拥有标准的页面加载作为后备对于不浏览器支持它)。有一个jQuery插件可以为你处理这些东西,由GitHubber编写,名为pjax,它们只使用进行回购导航。

+0

有脚本的更新版本在这里:http://www.dynamicdrive.com/dynamicindex17/iframessi2.htm – 2010-03-16 19:52:19

1

你感动的处理程序?也许你应该将函数移动到内部框架,以便当您抓取高度值时直接引用body而不是frame object ...然后调用parent.set height函数

另一个窍门,调用函数after 10毫秒

的setTimeout我记得我有这样的问题一次,但我用IE的getBoundingClientRect()来获取内容的高度,检查Mozilla开发者中心类似的东西,这只是一个提示,我没有研究它

另一个笔记

,什么是ifmBluePill?它是iframe吗?或者它里面的一个div?你为什么引用div的“contentDocument”?

1

顺便说一句,动态驾驶改进了他们的剧本总是调整即使iframe的内容更改:http://www.dynamicdrive.com/dynamicindex17/iframessi2.htm

从他们的网页:

这是原来的 的iFrame SSI脚本,二版本,就像 原始脚本让你无缝 通过IFRAME在你的页面 上显示外部内容。它通过 执行此动态调整IFRAME是 页面的高度内它含有 ,消除了出现而 紧贴地示出整个外 内容的任何可能 IFRAME滚动条。把它想象成使用DHTML模拟的SSI(服务器 一侧包含)! 此脚本适用于IE5 +和 NS6 +,并且对于其他浏览器,支持 的选项可以完全隐藏 相关iframe或使用其默认高度显示 。现在

,这个脚本从 原来的不同之处在于,你可以加载 附加文件*到IFRAME 在页面加载后,也和 的IFRAME会动态调整其 高度,以适应新的文档。因此,如果您不仅需要 通过 IFRAME标记显示外部内容,而且打算在加载页面后更改此 内容,请使用 此脚本。