瀏覽器實際套用的規則
- 彈出視窗會撐大到剛好容納你文件算繪後的尺寸。
- Chromium 系瀏覽器把彈出視窗限制在最大 800 x 600 px、最小 25 x 25 px。
- Firefox 採用同樣的 800 x 600 px 上限。
- 超出最大值的內容會出現捲軸,彈出視窗本身絕不會超過這個上限繼續變大。
- 沒有任何 API 可以直接設定彈出視窗的尺寸。
chrome.windows這組 API 調整的是瀏覽器視窗,而不是 action 彈出視窗。
基準寫法
給文件一個明確的寬度,讓高度跟著內容走:會讓彈出視窗跑版或跳動的陷阱
視區單位
不要在彈出視窗裡使用vh 與 vw。視區就是彈出視窗本身,而彈出視窗的尺寸又來自你的內容,於是視區單位造成了循環量測。實際上 100vh 會塌陷成意料之外的數值,在 Firefox 上尤其明顯。請改用固定的 px 值,或改採由內容驅動的尺寸。
百分比高度
在body 上寫 height: 100% 有同樣的循環問題:在你的內容給出高度之前,父層根本沒有固定高度。建議改用帶像素值的 min-height。
較晚載入的內容會改變彈出視窗尺寸
彈出視窗會以首次繪製時的尺寸開啟,接著在字型、圖片或非同步資料抵達時明顯跳動。要讓它保持穩定:- 為圖片設定明確的
width與height屬性。 - 用
min-height骨架為非同步區塊預留空間。 - 盡可能讓初始算繪維持同步,把資料填入已經定好尺寸的容器中。
捲軸閃現
如果內容在載入過程中短暫溢出,捲軸會閃現並讓版面位移。在body 上加 overflow-x: hidden 可以消除水平方向的閃現,而 scrollbar-gutter: stable 則能在真正出現垂直捲軸時,避免內容被推移。
縮放會改變實際生效的上限
瀏覽器縮放會縮放彈出視窗的 CSS 像素,因此一個 360 px 的彈出視窗在 150% 縮放下會占用更多螢幕空間,也會更早撞上 800 x 600 的上限。如果使用者回報彈出視窗被裁切,縮放是常見原因,把版面控制在大約 750 x 550 CSS px 以內可以留出餘裕。Firefox 注意事項
- Firefox 需要在
body(或一個固定寬度的根元素)上給出寬度,否則未受約束的彈出視窗可能算繪成塌陷狀態,或呈現意料之外的寬度。 - 由於 Manifest V3 移除了
browser_style,彈出視窗的所有樣式都由你自己負責。請自備一套基礎樣式。
Safari 注意事項
Safari 會把彈出視窗算繪成 popover,採用同樣的內容驅動模型。請沿用明確寬度的寫法,並以extension dev --browser=safari 測試。該指令僅在 macOS 上執行,需要完整的 Xcode 應用程式,而且目前還沒有即時重新載入,所以每調整一次尺寸就得重新建置一次(請參見 建置 Safari 擴充功能)。Safari 對於版面尚未穩定就先繪製這件事更嚴格,所以在它上面,預先定好尺寸的容器更為重要。
對彈出視窗尺寸除錯
執行你的擴充功能,然後像檢視任何頁面一樣檢視彈出視窗:快速檢查清單
- 在
body上設定固定的width,落在 320 到 400 px 之間。 min-height使用像素值,不要用vh,也不要用百分比高度。- 為圖片與非同步區塊預先定好尺寸。
- 保持在 800 x 600 的上限之內,並為縮放留出餘裕。
- 測試 Chrome、Firefox 與 Safari 的建置,上限雖然共通,算繪結果卻各有差異。

