contentDocument實現iframe自適應子頁面高度

     剛開通博客不久,經常在看到前輩和大牛在博客上分享技術經驗,就想用博客來記錄一些遇到過的問題和解決問題的經驗。

     前兩天一朋友和我討論到用iframe內嵌網頁如何做到讓iframe自適應子頁面的高度。我之前也遇到過同樣的問題,如果iframe在不設置高度的情況下,默認高度爲150px(在谷歌瀏覽器下親試,其他瀏覽器未實驗),如果iframe通過js引用其他子頁面進來也無法像div那樣通過內容的大小來改變iframe的高度問題,也就是說,內嵌子頁面的大部分內容都會被iframe外框的高度限制從而顯示不出來。

     當然如果需要切換的每個子頁面的高度都一樣的話,那麼預設iframe的高度是一種很方便有很簡單的方式,如果每個子頁面的高度不一樣,那麼就需要用js來改變iframe的高度了,由於項目中只用到一個js文件,所有的頁面引用的都是這個js文件,所以問題就變得比較麻煩。按理說,我們可以通過獲取子頁面的高度來設置iframe的高度,在onload方法中可以獲取到父頁面和子頁面的高度,但由於是點擊式切換頁面導致this所指的對象不同,在onload方法中獲取的子頁面高度數據沒有辦法傳遞到success()方法中。在一下js方法中用console.log(this);可以知道獲取第一個頁面高度的this對象和獲取到第二個頁面高度的this對象還有sucess()方法中的this對象都是不同的。所以利用對象存儲的方式也不行。



 這是前端代碼:



     之後通過查詢資料得知contentDocument屬性可以直接獲取iframe內嵌子頁面的document對象(contentDocument詳細用法參考:http://blog.csdn.net/alex8046/article/details/51456098


    由於調用sucess()方法的對象在父窗口,所以在sucess()中的document對象是父窗口的document對象,可以直接獲取到iframe標籤對象,從而對irame標籤的高度進行設置,

以下代碼中,two是iframe內嵌子頁面的body的id值



    

     由於js文件的執行順序是通過html的調用來決定的,此文件的執行順序爲:

                          父頁面.onload --> sucess()方法 --> 子頁面.onload

   當父頁面加載完畢時調用onload方法,之後點擊li標籤時出發sucess()方法,在sucess方法中設置跳轉頁面,當頁面跳轉完畢,子頁面加載完成時,子頁面調用了onload方法。

在子頁面加載時的this.parent可以獲取到父頁面的window對象,通過window對象獲取父頁面的body對象並設置body對象的高度加上子頁面的高度。之後再設置iframe標籤的高度爲子頁面的高度。如果設置iframe高度不設置父頁面的body高度的話,iframe的高度會因爲body對象的高度受限制而顯示不出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章