Chrome 154 responsive iframe:用 frame-sizing 取代手動高度同步
如果 iframe 內的文章、付款表單或互動元件高度不固定,常見做法是讓子頁面用 postMessage 回報高度,再由父頁面修改 iframe 的 height。這套流程需要自己處理來源驗證、載入時機、內容變動與重複通知。
Chrome for Developers 在 2026 年 9 月 16 日介紹 Chrome 154 的 responsive iframe sizing:父頁面可以用 frame-sizing 指定 iframe 依內容尺寸調整,嵌入頁面則要用 responsive-embedded-sizing meta 宣告允許的來源。這不是所有瀏覽器立即共用的通用解法,因此仍要保留 fallback 和版面位移檢查。
先分清楚它解決的是哪一段 iframe 問題
frame-sizing 主要處理「父頁面不知道嵌入內容應有多高或多寬」這件事。它不會自動替你解決:
- iframe 內的登入、權限或 CORS 問題。
- 內容本身載入失敗、圖片沒有尺寸或字型晚到造成的版面變化。
- 其他瀏覽器或舊版 Chrome 對新 CSS property 的支援。
- 父頁面刻意限制高度時的捲動與互動設計。
如果你的需求其實是移動 DOM 節點但保留 iframe 狀態,請先看用 moveBefore() 移動 DOM 並保留狀態;那和 iframe 依內容調整尺寸是不同問題。
最小設定:父頁面加上 frame-sizing
先在父頁面給 iframe 一個明確的寬度,再選擇要跟隨內容的尺寸:
<iframe class="embed" src="https://embed.example/article" title="嵌入文章"></iframe>.embed { width: 100%; frame-sizing: content-height;}content-height 適合寬度已由父頁面決定、但內容高度會變動的文章或元件。官方也列出 content-width、content-inline-size 與 content-block-size 等方向;實際選擇要配合你的 writing mode、版面限制與使用情境,不要把所有 iframe 都套成同一個值。
子頁面必須先 opt-in
嵌入內容要在載入前宣告允許哪些父頁面使用 responsive sizing。若只在自己的網站嵌入,可以把來源寫得更窄:
<head> <meta name="responsive-embedded-sizing" content="allow-origins=https://publisher.example" /></head>allow-origins=* 可以用於需要接受多個來源的嵌入服務,但它會放寬允許範圍。若來源集合可預先知道,優先列出明確 origin,並且不要把這個宣告誤當成 iframe 的內容安全政策;frame-ancestors、CSP、登入與資料權限仍要獨立設定。
這個 meta 宣告不能等頁面載入後才由 JavaScript 動態補上來補救。把它放在嵌入文件的 <head>,並讓父頁面以正式的 src 載入,才能讓瀏覽器在初始載入階段取得 opt-in 狀態。
內容變動時用 requestResize 通知
初次載入以外,嵌入內容可能因展開 FAQ、切換分頁或非同步資料而改變高度。Chrome 官方說明可以在內容更新後呼叫 window.requestResize():
function renderExtraContent(html) { document.querySelector('#content').insertAdjacentHTML('beforeend', html);
if ('requestResize' in window) { window.requestResize(); }}這段程式碼是示意範本,重點是把通知放在「內容已更新」的邊界,而不是每個 scroll、resize 或動畫 frame 都呼叫。若你的內容由多個非同步來源組成,可以在一次 render batch 完成後統一通知,避免不必要的尺寸更新。
舊瀏覽器要保留可用的 fallback
新 property 不應成為 iframe 唯一的可用路徑。可以用 feature query 讓支援的瀏覽器套用 responsive sizing,其他瀏覽器則保留預設高度:
.embed { width: 100%; min-height: 240px;}
@supports (frame-sizing: content-height) { .embed { frame-sizing: content-height; min-height: 0; }}min-height 不是精確的高度同步,但可以避免舊瀏覽器把 iframe 壓成看不見的區域。若你仍需要支援完整的舊瀏覽器體驗,再保留原本的 postMessage 流程,並將它當作 fallback,而不是在新舊兩套程式碼中同時無條件修改高度。
先檢查 CLS,再決定是否全面套用
內容依載入結果改變尺寸,可能把父頁面下方內容推開。這使 responsive iframe 不只是 CSS 相容性問題,也涉及 Core Web Vitals:
- 先為首屏 iframe 預留合理的
min-height或版面空間。 - 對圖片、廣告和非同步區塊提供穩定尺寸,減少內容自己反覆變高。
- 在 Chrome 154 和主要 fallback 瀏覽器分別觀察載入、展開互動與返回頁面的版面位移。
- 若 iframe 本身是低優先內容,評估延後載入是否比立即調整高度更穩定。
不要因為 frame-sizing 省掉了 postMessage,就直接刪除現有監控。先以一個嵌入頁面做對照,確認高度、捲動、鍵盤操作與 CLS 都符合預期,再擴大使用範圍。
這項功能適合什麼時候採用
適合採用的情境是:你能控制嵌入文件、父頁面與來源清單,而且主要問題是內容尺寸會隨資料改變。不適合直接採用的情境是:嵌入來源不可修改、瀏覽器支援範圍極廣,或既有 postMessage 已經有完整的安全驗證與穩定性監控。
Q: 加上 frame-sizing 後,所有瀏覽器都會自動調整 iframe 高度嗎?
A: 不會。這是 Chrome 154 的新能力,仍要依實際瀏覽器支援保留固定高度或 postMessage fallback,並以 feature query 逐步套用。
Q: 跨來源 iframe 可以使用 responsive sizing 嗎?
A: 可以在官方設計的 opt-in 流程下使用,但嵌入文件仍須在 meta 中列出允許的父頁面來源。allow-origins=* 不是預設最佳答案;能明確限制來源時,應使用明確 origin。
Q: requestResize() 可以每次 DOM 變動都呼叫嗎?
A: 不建議。把它放在一次內容更新完成後的邊界,並合併同一批非同步變更;反覆通知只會增加尺寸更新和版面變動的機會。
參考資料: