Safari Technology Preview 242:CSS attr() Level 5、IndexedDB getAllRecords()、dialog closedby
WebKit Blog · 2026-04-23
WebKit 於 2026 年 4 月 23 日發布 Safari Technology Preview 242,適用於 macOS Tahoe 與 macOS Sequoia。本版帶來多項 Web 平台規格更新,包含 CSS Values Level 5 的 attr() 擴充、IndexedDB 的批次讀取 API、以及 HTML Dialog 新屬性。
CSS Values Level 5:attr() 函式
TP 242 實作了 CSS Values Level 5 的 attr() 函式(commit 310246@main,Bug 173700363)。相較於 CSS 2.1 中僅能在 content 屬性使用的 attr(),Level 5 版本允許在任意 CSS 屬性值中使用,且可附帶型別轉換(如 attr(data-size px)),使 HTML 屬性值直接驅動視覺樣式成為可能,減少 JavaScript 的介入。
同批 CSS 更新還包含:font-synthesis-style 新增 oblique-only 值(CSS Fonts Level 4,commit 310409@main);修正 position-try-order 應使用 containing block 的書寫模式而非元素本身(commit 310277@main);修正 anchor-positioned 元素與 sticky parent 同存時的佈局錯誤(commit 310255@main)。
HTML:<dialog> closedby 屬性
TP 242 加入了 <dialog> 元素的 closedby 屬性支援(commit 310487@main,Bug 173974767)。此屬性控制對話框被關閉的觸發方式,可選值為 any(點擊背景或按 Esc)、closerequest(僅 Esc 或 Close Request)、以及 none(只能由程式關閉)。此功能對需要精確控制模態行為的設計模式(如表單確認、輕量 popover)尤為關鍵。
Web API:IndexedDB getAllRecords()
IndexedDB API 新增了 getAllRecords() 方法與對應的 IDBGetAllOptions(commit 310462@main,Bug 173881825)。此 API 允許透過 IDBObjectStore 和 IDBIndex 的 getAllRecords() 呼叫,同時取得鍵值與關聯記錄,省去分別呼叫 getAllKeys() 與 getAll() 再手動配對的步驟,並可透過 IDBGetAllOptions 指定查詢範圍與計數上限。
WebRTC 更新
WebRTC 部分新增了 RTCRtpReceiver.jitterBufferTarget 屬性(commit 310285@main,Bug 173676035),允許應用程式提示 WebRTC 引擎偏好的 jitter buffer 延遲量,對低延遲通話應用有實際調優意義。此外,RTC 統計資料中新增了視訊來源的 width 與 height 欄位(commit 310295@main,Bug 173677615)。
JavaScript 修正
修正了類別實例欄位初始化器在箭頭函式與巢狀作用域中的求值上下文(commit 310594@main,Bug 173296563);修正 %ArrayIteratorPrototype%.next() 在底層 TypedArray 被 detach 後應回傳 { done: true } 而非拋出例外(commit 310292@main,Bug 173759106)。
eslint-plugin-react-hooks 7.1.0:ESLint v10 支援、全錯誤回報、效能優化
Facebook/React GitHub Releases · 2026-04-16
eslint-plugin-react-hooks 7.1.0 於 2026 年 4 月 16 日發布,帶來 ESLint v10 相容性、編譯器行為改變及多項靜態分析改進。
ESLint v10 支援
由 @azat-io 在 PR #35720 中加入,外掛現在完整支援 ESLint 最新主版本。ESLint v10 對規則 API 有若干調整,此次更新確保外掛在新舊版本均可正常運作。
編譯器現回報所有錯誤
由 @josephsavona 實作(PR #35873–#35884),React 編譯器從原本遭遇第一個錯誤即停止,改為繼續分析並收集所有錯誤後統一回報。對於大型程式庫的一次性遷移,這意味著開發者可在單次掃描中取得完整問題清單,而非需要反覆執行。
非 React 檔案跳過編譯
由 @josephsavona 在 PR #35589 中提交的效能改進:對不含 React 程式碼的檔案跳過整個編譯流程,在大型 monorepo 中可顯著減少 lint 耗時。
Hook 相依性驗證改進
useEffect 相依陣列的 set-state-in-effect 偵測邏輯在五個 PR(#35134、#35147、#35214、#35419、#36107)中完成改進,降低了在特定非同步模式下的 false negative 比率。ref 驗證亦進行加強,現在會對非修改函式及事件處理器 props 進行更精確的 ref 傳遞檢查(PR #35893、#35062)。
Vue 3.5.33 穩定版修正:SFC :deep 巢狀、effect scope 記憶體洩漏、Teleport 掛載時機
vuejs/core GitHub Releases · 2026-04-22
Vue 3.5.33 於 2026 年 4 月 22 日發布(commit 3310eea4),為純 bug fix 版本,涵蓋編譯器、響應性系統、DOM 運行時及 Teleport/Transition 元件的邊緣情況修正。
編譯器 SFC::deep 在 pseudo-element 內的巢狀處理
修正了 SFC scoped CSS 中,:deep() 選擇器在 pseudo-element(如 ::before、::after)內部巢狀使用時,編譯器產生錯誤選擇器的問題。受影響的模式包含 ::before :deep(.child) 等複合結構,修正後作用域 hash 屬性可正確附加至選擇器。
Reactivity:effect scope 非序清理時的 unlink 錯誤
修正了 EffectScope 在非按建立順序清理時(out-of-order cleanup),其內部鏈結結構發生錯誤解除,導致後續 scope 仍殘留在父 scope 的追蹤清單中,造成記憶體洩漏的問題。
Runtime DOM:textarea resize 尺寸在更新時遺失
修正了 <textarea> 元素在 Vue 更新週期後,使用者手動調整的 resize 尺寸被重置的問題。
Teleport:掛載前不重新定位子元素
修正了 Teleport 元件在尚未完成 mount 生命週期時,若條件觸發,子元素提前被移動至目標容器的問題。現在要求 Teleport 完整掛載後方可進行子元素搬移。
Transition:條件性預設插槽的佔位保留
修正了在帶有明確預設插槽的 <Transition> 中,條件式渲染切換時佔位元素保留邏輯的錯誤。