2011-09-01 79 views
1

我有一个运行在iframe(同一个域)中的应用程序的网页。 iframe的高度根据iframed文档的高度设置为负载。问题在于iframed文档的尺寸发生了变化(通过扩展手风琴,菜单等)。发生这种情况时是否触发了任何事件,我可以使用它来调整iframe元素的大小?当文档更改大小时调整iframe的大小

我试图绑定到iframe中窗口对象上的resize事件,但由于文档内容更改时窗口未被调整大小,事件不会触发。我需要的是对文档对象的某种调整大小事件,但据我所知,没有这样的事情。还有另一种方法来检测文档高度的变化吗?

我很欣赏一个通用的解决方案,因为我不知道iframe的内容,但我可以在其中包含通用脚本。

回答

0

存在为iframe窗口触发的调整大小事件。你可以监听它们(在iframe本身中),并在父窗口中触发一些函数来传播新的大小并更新父窗口中的iframe大小。

0

您是否尝试过使用scroll事件并将其附加到iFrame的contentWindow?

否则,我宁愿建议你直接挂钩到手风琴,而不是依靠捕捉可能发生或可能不会发生的滚动事件。 因为一旦用户实际上滚动滑块,不是当手风琴扩大..

滚动才会触发但是你可以简单地调用父的方法,当用户展开的手风琴传递手风琴的新的大小。

0

如果你正在使用jQuery用户界面,那么你可以使用事件change和通话功能

setHeight 

http://jqueryui.com/demos/accordion/

function setHeight() { 
    parent.document.getElementById('the-iframe-id').height = document['body'].offsetHeight; 
} 
+0

谢谢,但我需要一个事件来绑定自动调用setHeight函数调用。 –

+0

http://jqueryui.com/demos/accordion/ jqueryui –

+0

看到事件发生变化是的,但问题不仅限于手风琴;我还需要检测其他内容更改,以更改文档的大小。似乎我必须解决在各种插件中使用回调,尽管... –

0

我发现了一个可能的,但不理想的解决方案,而这是行不通的在所有浏览器中:

通过绑定到body元素的iframe中的DOMSubtreeModified,我可以在parent或top和c中找到iframe元素把它变成高度。

$('body').bind('DOMSubtreeModified', function(){ 
    top.document.getElementById('appFrame').height = $(document).height(); 
}); 

下面是此事件的浏览器支持的概述: http://www.quirksmode.org/dom/events/

相关问题