2009-03-02 185 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標記顯示外部內容,而且打算在加載頁面後更改此 內容,請使用 此腳本。