2011-09-01 132 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/

相關問題