← 所有文章

为什么 Safari 27 带来 525 项修复:来自 WebKit 实验室的笔记

Safari 团队在 WWDC 2026 上说过的最具揭示性的一句话,并不是关于某个功能。在 Safari and Web Technologies 小组实验室的一个小时里,WebKit 工程师们始终围绕着同一个问题打转:一个浏览器团队如何决定该构建什么,又为什么从外界看来如此频繁地显得进展缓慢?他们一再回到的答案——根据实验室内容转述——是他们确实在乎,而这一点有一个可供查证的数字作支撑。Safari 27 带来了 58 项新功能和 525 项修复,WebKit 称之为“近年来任何一个 Safari 版本中规模最大的一堆修复”。1 本文要讲的,正是这个数字背后的推理逻辑,取自实验室内容,并以 WebKit 自家的发布说明为依据。

观看:Safari and Web Technologies Group Lab(WWDC26)

WWDC 2026 的 Safari & Web Technologies Group Lab。

TL;DR

  • Safari 27 带来 58 项新功能和 525 项修复,是任何一个 Safari 版本中修复数量最多的一次。1 实验室将今年定位为一场“纸割伤”战役:去追那些让平台值得信赖的细小正确性缺陷,而不只是头条级的功能。
  • 最清晰的例子是对 JavaScript 模块加载器的重写。WebKit 的说明中写道,他们“通过重写 ES module loader 以符合标准,修复了多个 top-level await 正确性缺陷”,替换掉了一个基于 2016 年一份早已被废弃、且完全早于 top-level await 的提案的实现。1
  • 实验室以 :has() 选择器作为案例,说明一项标准实际上是如何打破僵局的:这个功能被工程师们称为“多年来不可能实现”,直到 Igalia 的工程工作让它足够快,如今它已落地于每一款主流引擎。23
  • 表单控件这条故事线日趋成熟:appearance: base-select 会清除原生 <select> 样式,让您从一块干净的画布开始;而更宏大的“为每一个表单控件设置样式”的方向,仍是一份尚无定论的规范,专家组在台上对此公开存在分歧。12
  • WebKit 和 JavaScriptCore 运行在每一款 Apple 操作系统上,包括 watchOS,而 SwiftUI 如今也拥有了一等公民般的 WebView,因此“网页引擎”比起单个应用,更接近于一项系统服务。24

这个数字,以及它的含义

WebKit 对 Safari 27 的定位带着不同寻常的量化色彩。除了新功能之外,这个版本承载了 525 项修复,是“任何一个 Safari 版本中规模最大的一堆修复”。1 在实验室里,团队把这个数字与一种姿态而非一个里程碑联系在了一起:转述其大意,开发者有时会把浏览器的种种取舍解读为不在乎他们的日常体验,而团队的回应恰恰相反——把网页在 Safari 里做得更糟,对他们没有任何好处。2 您不必凭感觉去相信这份诚意,因为修复数量就是证据,而实验室自己对发布说明的描述是:它们长到足以让人滚动浏览好一阵子。2

最能说明问题的单个例子,是一处大多数开发者从未察觉的底层管道。WebKit 重写了 JavaScript 模块加载器。发布说明写得很具体:团队“通过重写 ES module loader 以符合标准,修复了多个 top-level await 正确性缺陷”,因为先前的实现“基于一份 2016 年早已被废弃、且完全早于 top-level await 的 WHATWG Loader 提案”,并可能让导入在导出尚未完全初始化之前就访问到它们。1 重写一个模块加载器去修复一整类 await 顺序缺陷,是一项巨大的工程量,可一旦做对了,却没人会注意到。这就是浓缩在一次提交里的“纸割伤”战役。

一项标准实际上如何打破僵局::has() 的故事

实验室里最有价值的一段叙述,是关于 CSS :has() 选择器的——那个被期盼已久的父选择器。专家组的转述版本是这样的:浏览器工程师在将近二十年的大部分时间里都说“不”,理由是芯片的速度还不足以在不拖垮页面性能的前提下完成它的求值,直到让它变得可行的工作终于完成,它才跨浏览器落地。2 支撑这个故事的可查证主干是真实的。WebKit 在 Safari 15.4 中落地了 :has(),Chromium 随后在 Chrome 105 中跟进,其工程工作由开源咨询公司 Igalia 主导,而 Firefox 在第 121 版补齐了这一阵容——于是这个多年来“不可能实现”的选择器,如今已在每一款主流引擎中可用。3

实验室把这件事与一条值得记住名字的设计原则联系了起来。HTML 项目的“关切方优先级”(priority of constituencies)规定了当各方需求发生冲突时,谁的需求胜出:用户优先于作者,作者优先于实现者,实现者优先于规范制定者,而所有这些都优先于理论上的纯粹性。5 正是这条规则,解释了为什么浏览器宁愿永远背负一个丑陋的兼容性变通方案,也不肯让一个站点崩坏;也解释了为什么一项对作者有益的功能,若其实现会通过性能损害用户,仍可能等上数年。:has() 就是这条规则以慢镜头方式得出的结论:对作者有用,因让它变快所需付出的用户代价而受阻,直到这份代价降下来才得以落地。

表单控件项目,以及一场公开的分歧

过去十年里呼声最高的 CSS 能力终于到来:为原生表单控件设置样式,而无需用一堆 <div> 把它们重建一遍。Safari 27 带来了 appearance: base-select,用 WebKit 的话说,它让您“清除原生样式,从一块干净的调色板开始”,再叠加您自己的 CSS,同时保留该控件真正的语义、键盘处理与无障碍能力。1 它与 ::picker(select)::picker-icon::checkmark 以及一个 <selectedcontent> 元素相配合,构成了 为真正的 select 元素设置样式 一文所涵盖的可定制 select 表面。

实验室所补充的,是对这个更宏大愿景有多么未竟的坦诚。将 appearance: base 扩展到每一个表单控件是一个明确的方向,而非一份已落地的规范,而且专家组在镜头前就最棘手的问题与自己产生了分歧:未设样式的基线究竟应该长什么样。转述这段交锋,一种立场是,未设样式的控件应当看起来像一个朴素的现代控件;反驳则认为,“现代”是一个不断移动的时尚目标,并非规范所能钉死的东西,因此基线应当尽可能多地从页面继承,并在其余方面尽量不带任何主张。2 他们一致认同的工程约束,才是真正困难的部分:这项功能只有在默认渲染与 DOM 结构跨浏览器完全一致时才能成立,因为作者会同时针对两者来写样式。2 这正是为什么一个有着 30 年历史的问题至今仍是进行中的工作,而非一个打勾完事的选项。

网页引擎是一项系统服务

实验室给出的一个有用的重新框定:WebKit 远不止是 Safari。WebKit 和 JavaScriptCore 在每一款 Apple 操作系统上发布,包括压根没有浏览器的 watchOS,而任何运行 JavaScript 的应用都依赖于 JavaScriptCore。2 WebKit 自家的 WWDC 资料也表达了同样的观点,将应用界面描述为“由 WebKit 和 JavaScriptCore 渲染的 HTML、CSS 和 JavaScript 所驱动——这与 Safari 内部的引擎是同一套”,且贯穿各个平台。1 对开发者而言,其切实成果落在了 2025 年:彼时 SwiftUI 获得了原生的 WebViewWebPage 模型,使 WebKit 成为一等公民般的 SwiftUI 视图,而不再是包裹在 UIViewRepresentable 里的 WKWebView4 当网页引擎如此深入操作系统时,“这东西该用原生还是用网页”就不再是一个非此即彼的问题了。

WebKit 率先发布了什么,以及接下来在构建什么

有两条较小的线索值得开发者留意。第一,Safari 持续领先于其他引擎发布 CSS 功能:hanging-punctuation 多年来一直为 Safari 独有,CSS filter() 函数(不同于得到广泛支持的 filter 属性)仍是 WebKit 独有,而 Safari 近期还发布了 random() 函数,并配有一个用于在 CSS Values 草案所定义的离散值之间进行选择的 random-item()67 那种“Safari 落后了”的条件反射,往往忽略了它有多频繁地走在最前。

第二,网页扩展(web-extensions)这条故事线正在整合。跨浏览器的 WebExtensions 工作正从一个持续多年的社区组,向一个正式的 W3C 工作组迈进,并有一份瞄准真正互操作性规范的 2025 年章程草案。8 此外,Apple 在 WWDC 2026 主题演讲上宣布了一个面向消费者的转折:“Describe an Extension”,它借助 Apple Intelligence,从一段平实语言的描述出发,生成并安装一个自定义的 Safari 扩展,无需 Xcode,也无需走一趟 App Store。9 请把它当作主题演讲中的宣布、而非一个开发者 API 来看待,但方向是清晰的:扩展这个表面正在标准层和终端用户层两端同时扩张。

该从中带走什么

实验室是一扇窗,让人得以一窥大多数功能报道所跳过的一种取舍。一个浏览器团队可以去追头条级的功能,也可以去追正确性,而 WebKit 在这个版本里明显地选择了后者:525 项修复,一个为一整类 await 缺陷而重写的模块加载器,一个等了二十年才等到硬件跟上的父选择器。对任何在这个平台上构建东西的人来说,其教训是:当您想知道究竟什么变好了时,去读发布说明,而不是主题演讲。功能本身在 可定制 selectCSS Grid LanesHTML model 元素 里;而这种节奏背后的推理,则在实验室里。

常见问题

Safari 27 里有多少项修复?

525 项修复,外加 58 项新功能,WebKit 将其描述为任何一个 Safari 版本中修复数量最多的一次。1 实验室把今年的主线围绕正确性与“纸割伤”来组织,而非头条级的功能。

模块加载器的重写是怎么回事?

WebKit 为符合标准而重写了 Safari 的 ES module loader,修复了多个 top-level await 正确性缺陷。先前的实现基于一份 2016 年早已被废弃、且早于 top-level await 的 WHATWG Loader 提案,并可能让导入在导出尚未完全初始化之前就访问到它们。1

appearance: base 要发布了吗?

appearance: base-select 在 Safari 27 中为 <select> 元素发布,它会清除原生样式,让您在保留控件语义的同时应用自己的 CSS。1appearance: base 扩展到所有表单控件是一个明确的方向,但仍是一份尚无定论的规范,而且实验室专家组就未设样式的默认状态应该长什么样公开存在分歧。2

Apple 真的加入了 AI 生成的 Safari 扩展吗?

是的。Apple 在 WWDC 2026 主题演讲上宣布了“Describe an Extension”:它借助 Apple Intelligence,从一段自然语言描述出发,生成并安装一个自定义的 Safari 扩展,无需 Xcode 或 App Store。9 这是一项消费者功能,而非开发者 API。


Safari 的功能系列文章讲的是 是什么为真正的 <select> 设置样式用于原生瀑布流的 CSS Grid Lanes,以及 HTML <model> 元素。本文讲的,则是这种节奏背后的 为什么。整个系列的入口是 Apple 生态系统系列

参考资料


  1. WebKit, News from WWDC26: WebKit in Safari 27 beta. Source for the 58 new features and 525 fixes (“the largest pile of fixes in any Safari release”), the ES module loader rewrite (“Fixed multiple top-level await correctness bugs with a rewrite of the ES module loader for standards compliance,” replacing an implementation “based on an abandoned 2016 WHATWG Loader proposal that predated top-level await entirely”), the appearance: base-select description (“clear the native styling and start with a clean palette”) with ::picker(select)/::picker-icon/::checkmark/<selectedcontent>, and the framing of WebKit and JavaScriptCore as the engines behind app interfaces across Apple platforms. 

  2. Apple, WWDC 2026 session 8015, Safari and Web Technologies Group Lab. Paraphrased from a locally transcribed recording; Apple publishes no official captions for the labs, so the wording here is a paraphrase, not a quotation, and exact phrasing is unverified. Source for the team’s caring-about-the-platform framing tied to the length of the release notes, the :has() narrative that engineers resisted it for roughly two decades on performance grounds, the live disagreement over the unstyled appearance: base baseline (modern-control vs inherit-from-page) and the cross-browser identical-rendering-and-DOM-structure constraint, and the point that WebKit/JavaScriptCore run on every Apple OS including watchOS. 

  3. WebKit, Using :has() as a CSS Parent Selector and much more, and the cross-engine shipping record: Safari 15.4, Chrome 105 (engineering led by Igalia), Firefox 121. Source for :has() shipping in all major browser engines after years of being considered infeasible. 

  4. Apple, WebKit for SwiftUI and WWDC 2025 session 231, Meet WebKit for SwiftUI. Source for SwiftUI’s native WebView and WebPage model introduced in the 2025 releases, making WebKit a first-class SwiftUI view. 

  5. W3C, HTML Design Principles: Priority of Constituencies. Source for the ordering “users over authors over implementors over specifiers over theoretical purity.” 

  6. MDN / caniuse, hanging-punctuation and the CSS filter() function. Source for both being supported in Safari/WebKit and not in Chrome or Firefox at time of writing (the filter() function is distinct from the widely supported filter property). 

  7. W3C, CSS Values and Units Module Level 5, which defines random() and random-item(). Safari has shipped the random() function; random-item() selects among discrete keyword or property values. 

  8. W3C, WebExtensions Community Group and the 2025 draft WebExtensions Working Group charter. Source for the cross-browser WebExtensions effort moving from a community group toward a formal Working Group. 

  9. Apple announced “Describe an Extension” at the WWDC 2026 keynote, generating and installing a custom Safari extension from a natural-language description via Apple Intelligence, without Xcode or the App Store. Reported by MacRumors, June 8, 2026. Described here as a keynote announcement and consumer feature, not a developer API. 

相关文章

CSS Grid Lanes:Safari 中的原生瀑布流布局

CSS Grid Lanes 用三行 CSS 将原生瀑布流布局带入 Safari 26.4,并通过 flow-tolerance 调节项修复了瀑布流由来已久的 Tab 顺序问题。

2 分钟阅读

可定制的 Select:终于能为真正的 <select> 设置样式了

Safari 27 和 Chrome 135 让您能为真正的 select 元素设置样式:appearance: base-select、::picker(select)、option 中的富 HTML,以及可替换的按钮。

4 分钟阅读

无构建宣言:不用打包工具直接发布

FastAPI + HTMX + 纯CSS,零构建工具,Lighthouse满分。真实的生产数据、诚实的取舍分析,以及清晰的边界划定。

1 分钟阅读