Firefox 155 正式發布:地址列新增追蹤器計數,mailto 連結收緊為使用者主動觸發
Mozilla Firefox Release Notes · 2026-09-01
Mozilla 於 2026 年 9 月 1 日發布 Firefox 155,同步釋出正式版 release notes 與對應的 開發者異動說明。這個版本把「這個瀏覽器工作階段封鎖了幾個追蹤器」直接攤在網址列上,同時調整了 mailto: 連結的觸發條件與 captive portal 偵測用網域。開發者關注的 CSS、JavaScript 與 Web API 也有多項更新。
使用者可見的行為改動
最顯眼的變化是網址列直接顯示追蹤器封鎖數,讓 Firefox 內建的 Enhanced Tracking Protection 統計不再只藏在盾牌圖示的下拉選單裡,而是常駐可見。除此之外,Firefox 155 也讓使用者能在設定裡重新排序 Container,新的排序會套用到所有列出 Container 的地方(分頁列、右鍵選單等)。
安全性相關的行為也收緊了一項:mailto: 連結現在只能在使用者主動動作(如點擊)後才會開啟,網頁腳本無法再無預警地跳出預設郵件用戶端。這類調整通常是為了堵住頁面利用 window.location = "mailto:..." 之類手法偷跳窗的路徑。
Captive Portal 偵測網域更換
Firefox 用來偵測「目前是否卡在公共 Wi-Fi 登入頁」的探測網域,從舊有的 detectportal.firefox.com 換成新的 firefox-portal-detection.com。這項改動對一般使用者無感,但對維護防火牆或代理伺服器白名單的網管會直接造成影響——沿用舊網域名單的環境,captive portal 偵測會失敗或表現異常,須同步更新允許清單。
面向開發者的平台功能
- CSS
attr()函式支援非字串型別的回傳值 - 新增 CSS
progress()函式與用於相對色彩調整的alpha()函式 - CSS 巢狀(nesting)深度上限訂為 75 層,避免過深巢狀造成當機
Promise.allKeyed與Promise.allSettledKeyed兩個新 Promise 組合方法- WebAssembly 的 Compact Import Section 與 Wide Arithmetic 提案落地
- HTTP/3 支援 QUIC version 2(
RFC 9369) - SVG
<a>元素開放 URL 相關屬性,getBBox()開始接受 options 參數 - WebTransport 新增 send groups 與金鑰材料匯出(keying material export)
開發者工具這邊,Rules View 新增 prefers-reduced-motion 模擬切換,偵錯器可用 Ctrl+Alt+B 一鍵切換所有中斷點,JSON Viewer 也開始支援 JSONL/NDJSON 格式並提供逐行的解析錯誤提示。這批工具改動對排查無障礙互動與串流式 API 回應特別有幫助。
影響範圍
對一般網站開發者來說,captive portal 網域異動與 mailto 收緊是唯二可能牽動既有部署的項目——前者影響企業網路環境的白名單設定,後者影響任何依賴 mailto 自動觸發的行銷頁或客服流程。CSS 與 WebAssembly 的新增能力則是漸進式增強,不會破壞既有頁面行為。Firefox 同版也發布了對應的安全公告 mfsa2026-82,列出本版修補的弱點。
原始來源:Firefox 155 Release Notes、MDN Firefox 155 for Developers、LWN.net 報導
WHATWG 修正 HTML 規格:Window 具名存取不再限定 HTML 元素,任何命名空間的 ID 都算數
WHATWG HTML Standard (GitHub commit) · 2026-09-01
WHATWG 在 HTML Standard 倉庫合併了一筆由 annevk 提交的規格修正 f0e63b9,標題是「Expose elements from any namespace by ID on the Window object」。這筆改動把 window 物件具名存取(named access)的定義,從「只認 HTML 命名空間的元素」放寬成「只要有 ID 就算」。背後的推力是一份長期存在的規格與實作落差報告 issue #9766。
背景:規格寫的和瀏覽器做的不一樣
issue #9766 由 ADKaster 提出,指出現行規格文字裡「HTML elements」被定義為僅限 XHTML 命名空間下的元素,理論上 SVG、MathML 元素就算有 id 屬性,也不該出現在 window 的具名屬性裡。但他測試後發現三大瀏覽器實際上都會把帶 ID 的 SVG 元素暴露到 window 上,例如頁面裡有 <svg id="foo">,window.foo 依然拿得到該元素——這與規格文字矛盾。issue 被標上 compat 標籤,代表這是「規格要追上瀏覽器既定行為」的類型,而不是反過來要求瀏覽器改實作。
核心改動
commit 修改了 HTML 規格裡定義 Window 具名屬性清單的兩處演算法文字,把「HTML elements」與「id content attribute」的措辭,換成 DOM 規格既有的抽象概念「元素的 ID」(concept-id),不再綁定命名空間:
- the value of the id content attribute for all HTML elements
- that have a non-empty id content attribute
+ the ID of all elements that have an ID
- HTML elements that have an id content attribute whose value is name
+ elements whose ID is name and that are這個改法的關鍵在於「元素的 ID」是 DOM 規格定義的抽象概念,不因命名空間而異——只要一個元素(不論是 HTML、SVG 還是 MathML)有非空的 id 屬性,就符合這個概念。整筆變更僅 +6 −7 行,是措辭層級的精簡,不牽涉演算法邏輯重排。
影響範圍
對開發者而言,這筆修正把瀏覽器多年來的既成行為正式寫進規格,像是用 window.mySvgId 直接存取帶 ID 的 SVG 節點,原本屬於「規格未定義但到處都能用」的灰色地帶,現在成為標準行為。對應的 web-platform-tests 修改在 wpt#62350,用來驗證非 HTML 命名空間元素也能透過 ID 被具名存取抓到。由於這只是把既有跨瀏覽器行為文件化,預期不會造成相容性破壞。
WHATWG 修補 ElementInternals.setValidity() 規格漏洞:訊息換行終於和 setCustomValidity() 一致
WHATWG HTML Standard (GitHub commit) · 2026-09-01
WHATWG HTML Standard 合併了一筆由 annevk 提交、zcorpan 完成 commit 的規格修正 7e501a9,標題是「Normalize newlines in ElementInternals.setValidity()」。這筆改動要求 ElementInternals.setValidity() 在寫入驗證訊息前,先對訊息內容做換行正規化(normalize newlines),使其與同樣用來設定驗證訊息的 setCustomValidity() 行為一致。
背景:自訂表單驗證的兩條路徑
ElementInternals 是 Custom Elements 用來取得表單參與能力(form-associated custom elements)的介面,setValidity() 是它用來設定驗證狀態與錯誤訊息的方法,對應原生表單元素的 setCustomValidity()。問題是規格裡這兩個 API 對同一段訊息字串的處理不一致:setCustomValidity() 會先把訊息裡的 \r\n、單獨的 \r 統一正規化成 \n(即 infra 規格定義的「normalize newlines」演算法),但 setValidity() 一直沒有做這一步。結果是同一段含有 \r\n 的訊息,經由兩個不同 API 設定後,最終存進去的驗證訊息字串會不一樣。
核心改動
commit 把 setValidity() 演算法拆成三個更明確的步驟:先處理 message 未給定時預設為空字串,再檢查「有任何 flag 為 true 但 message 為空字串」時要丟出 TypeError,最後新增一個顯式步驟對 message 做換行正規化:
- If flags contains one or more true values and message is not given
- or is the empty string, then throw a TypeError.
+ If message is not given, then set it to the empty string.
+
+ If flags contains one or more true values and message is the empty
+ string, then throw a TypeError.
+
+ Set message to the result of normalizing newlines given message.
For each entry flag -> value of flags, set element's validity
flag with the name flag to value.
- Set element's validation message to the empty string if message
- is not given or all of element's validity flags are false, or
- to message otherwise.
+ Set element's validation message to the empty string if all of
+ element's validity flags are false; otherwise to message.拆開判斷式的同時,「message 未給定」與「message 為空字串」被合併為同一種情形處理,邏輯上更乾淨:先把未給定的 message 收斂成空字串,後面的錯誤檢查與清空判斷就都只需要比對空字串,不用同時檢查兩種狀態。
影響範圍
這是一筆行為修正而非新增功能——瀏覽器若嚴格照舊規格實作,setValidity() 存進去的驗證訊息在含有 \r\n 時會與 setCustomValidity() 不同,導致依賴 validationMessage 做字串比對或呈現的自訂表單元件出現差異行為。修正後,兩個 API 對相同輸入會產生相同結果,實作端只要跟進這筆 commit 更新驗證邏輯即可對齊。影響範圍侷限在使用 ElementInternals 實作 form-associated custom elements 並在訊息裡帶換行符的場景。