在使用Vue框架進行開發過程中,我們常常需要用iframe嵌套外部頁面。但是嵌套的頁面高度可能會超出iframe的高度,造成頁面顯示不全的問題。
解決方法一般是通過在頁面加載完成后,獲取iframe內部頁面的高度,然后根據高度設置iframe的高度。代碼如下:
mounted() { const iframe = document.getElementById('myIframe') iframe.addEventListener("load", () =>{ iframe.height = iframe.contentWindow.document.body.scrollHeight + 'px' }) }
其中,mounted是Vue的生命周期函數,表示組件掛載完成后觸發。iframe可以通過id屬性或者ref屬性獲取,在這里我們用了id。addEventListener是為了在頁面加載完成后執行獲取高度的操作。獲取高度的代碼是通過訪問iframe的contentWindow屬性獲取到里面的頁面,然后訪問document.body.scrollHeight屬性獲取到頁面的高度,最后再將該高度賦值給iframe的height屬性即可。
需要注意的是,由于需要等待iframe內部頁面加載完成才能獲取到高度,因此獲取高度的代碼需要放在load事件中,而不是放在mounted函數中。否則無法獲取正確的高度。
除此之外,還有一些特殊情況需要注意,例如iframe內部頁面有動態高度(如圖片加載、文本輸入等),則需要使用MutationObserver監聽內部頁面的變化,隨時更新iframe的高度。另外,由于跨域問題,需要確保嵌套的外部頁面和當前頁面在同一域名下,否則無法獲取內部頁面的高度。