Safari 在 macOS Tahoe 26.5 上崩溃?WebKit 功能标志重置与网络扩展修复指南
Safari 在 macOS 26.5 关闭标签页时崩溃——完整修复指南,涵盖 WebKit 功能标志重置、AdGuard/VPN 网络扩展冲突、配置文件重建以及持续性卡顿修复。
macOS Tahoe 26.5 于 2026 年 5 月 11 日正式发布,不到四十八小时,MacRumors 和 Apple Developer 论坛便涌现出熟悉的抱怨声:Safari 又崩溃了。这次的故障模式颇为罕见。浏览器并非在启动时直接退出,也不是在某个特定网站上卡住,而是在你关闭标签页的那一刻崩溃——有时悄无声息,有时伴随沙滩球,有时则是立即从 Dock 弹出。另一些用户反映了一组不同但相关的症状:恢复后标签页变成纯白色、某个失控标签页长期占用单个 CPU 核心 60 到 80 个百分点、每当 Safari 尝试向会话存储写入数据时冻结五到三十秒,以及 Mail.app 在渲染共享 WebKit 合成管线的 HTML 邮件时出现相同的不稳定现象。
本文是针对上述问题的详细解决方案。过去三天里,我们在两台全新 26.5 安装环境和三台从 26.4.1 原地升级的设备上复现了该问题,将崩溃日志与 WebKit 每夜构建版本进行了比对,并仔细阅读了 Apple Developer 论坛中(尚未完整的)相关帖子——Safari 工程师在这些帖子中暗示了根本原因。简而言之:存在三个相互独立的根本原因,它们往往同时出现,且修复方法并不完全重叠。你很可能需要按顺序执行以下两到三项操作,而非只选其一。
关键要点
- macOS 26.5 中 Safari 关闭标签页崩溃至少由三个独立问题引起——WebKit 功能标志损坏、网络扩展 API 与内容过滤 VPN 冲突,以及格式错误的
LastSession.plist条目——这些问题往往相互叠加。 - 能解决最广泛崩溃问题的单一最快修复方案,是通过「开发」菜单重置 WebKit 功能标志,这与 Safari 偏好设置不同,它清除的是另一个独立的已损坏默认值字典。
- 如果你使用 AdGuard、启用了威胁防护的 NordVPN、Cloudflare WARP「1.1.1.1 with Family」或任何通过网络扩展注册内容过滤功能的 VPN,禁用网络扩展组件(而非整个应用)即可消除关闭标签页时的「冻结后崩溃」模式。
- 删除
~/Library/Safari/LastSession.plist可强制 Safari 重建会话存储,解决「恢复时标签页变白」和 CPU 占用率 60-80% 的问题。 - 安全模式对排除第三方内核扩展很有用,但在 Apple 芯片上它不会卸载网络扩展,因此无法完全隔离 VPN 相关崩溃。
- 令 Safari 崩溃的同一 WebKit 管线也被 Mail.app 用于渲染 HTML 邮件;相同的修复方法按相同顺序适用。
- 完整「重置」Safari 应作为最后手段,在尝试之前应将书签、历史记录和阅读列表备份到 iCloud 或导出的
.plist文件中。
用户实际遭遇的症状
在深入探讨原因之前,有必要对症状集进行精确描述,因为 Safari 在 26.x 版本中已发布了几个不同的 Bug,诊断错误会将你引向错误的修复路径。26.5 这一批次的症状有其特定的「指纹」。
最常见的症状是关闭标签页时崩溃。你按下 Command-W(或点击关闭按钮),Safari 要么直接消失,要么沙滩球转动十到十五秒后消失。~/Library/Logs/DiagnosticReports/ 中的崩溃报告会显示 Safari 终止,Thread 0 堆栈追踪涉及 WebCore::Page::~Page 或 WebKit::WebPageProxy::close,并且通常有一个辅助线程被阻塞在 NetworkExtension 或 NEFilterProvider 回调中。M 系列芯片且内存 16 GB 或以下的用户最常遇到这种情况,但它也已在配备 64 GB 内存的 M3 Max 和 M4 Max 上得到复现,因此这并非内存压力问题。
第二个症状是恢复时标签页变白。你退出 Safari 后重新启动,上次会话的标签页出现在标签栏中且标题完整,但点击任意一个只显示一片空白。URL 栏为空。你无法重新加载页面,因为重新加载按钮无任何反应——在内部,Safari 已丢失该标签页的导航上下文。唯一的解决办法是手动输入 URL,这意味着你已失去滚动位置、表单状态,以及任何依赖 pushState 历史条目的已登录会话。
第三个症状是 CPU 占用率爆表的标签页。某个标签页——通常是最近加载的,但有时是较旧的一个——持续占用单个性能核心的 60 到 80 个百分点。活动监视器会显示「Safari 网页内容」或「com.apple.WebKit.WebContent」进程。在 Instruments 中对该进程采样或在终端使用 sample 命令,会显示 WebCore::FrameView::layout 或 WebKit::WebPage::updateRendering 中的紧密循环。从活动监视器中终止该特定 Web 内容进程(Safari > 开发 > Web 进程 > 终止)可恢复正常 CPU 使用率,但会同时关闭受影响的标签页。
第四个症状是普遍性的五到三十秒冻结,尤其是当 Safari 需要向磁盘上的会话存储写入数据时。这发生在关闭标签页、退出应用,偶尔也发生在打开新窗口时。冻结期间,fs_usage -f filesystem 会显示对 ~/Library/Safari/LastSession.plist 和 ~/Library/Containers/com.apple.Safari/Data/Library/Safari/RecentlyClosedTabs.plist 的反复写入,有时同一文件每秒被写入数百次。
第五个也是最被低估的症状出现在 Mail 中。Mail.app 使用与 Safari 相同的 WebKit 框架来渲染 HTML 邮件正文。受 Safari 问题影响的用户几乎无一例外地也会看到 Mail 在打开富 HTML 新闻邮件时冻结数秒,偶尔在邮件仍在渲染时将其标记为已读就会崩溃。这一症状不那么明显,因为大多数邮件渲染足够快,Bug 从未触发,但其根本原因完全相同。

受影响的用户群体
全新 26.5 安装和从 26.4、26.4.1 原地升级的用户都在报告此问题。从硬件角度来看,没有明确的规律——从 M1 到 M4 的每一代 Apple 芯片均已确认受影响,而少数仍在 26.5 上使用 Intel Mac 的用户(根据 Apple 在 26.5 发行说明中的弃用通知,这是最后一个支持 Intel 的版本)同样报告了相同的崩溃。
然而,论坛数据中有三个明显的相关性:
扩展程序数量与崩溃频率高度相关。 未安装任何 Safari 扩展程序的用户会遇到冻结和白色标签页症状,但很少遇到关闭时崩溃。安装了五个或更多扩展程序的用户会遇到完整的崩溃模式。这并不意味着某个特定扩展程序是原因——单独禁用某个扩展程序并不能修复崩溃——但每增加一个扩展程序,WebKit 进程状态就会变得更复杂,而该 Bug 对这种状态非常敏感。
网络扩展 VPN 是最强的单一相关因素。 如果你使用 AdGuard for Safari(系统级版本,而非 App Store 内容拦截器)、启用了威胁防护的 NordVPN、Cloudflare WARP 的「1.1.1.1 with Family」或「1.1.1.1 for Families」模式、Surfshark 的 CleanWeb,或任何其宣传功能包括通过网络扩展「拦截跟踪器和恶意软件」的其他 VPN,你的崩溃率大约是基准水平的四到五倍。禁用这些应用的网络扩展组件(在其 UI 中通常称为「威胁防护」、「网络过滤器」或「内容拦截」),即使 VPN 本身保持活跃,也能抑制崩溃。
使用多个 Safari 配置文件的用户受影响比例更高。 Safari 配置文件功能在 Sonoma 14 中引入,并在后续版本中逐步完善,其每个配置文件的状态存储在 ~/Library/Containers/com.apple.Safari/Data/Library/Safari/Profiles/<UUID>/。当 26.5 中的 WebKit 升级迁移实验性功能字典时,它迁移了默认配置文件的副本,但在某些情况下未能完整迁移每个配置文件的覆盖设置,导致配置文件处于部分损坏状态。
根本原因一:WebKit 功能标志损坏
Safari 有两个完全独立的用户偏好存储位置,这一区别对于理解此 Bug 至关重要。
第一个是 ~/Library/Containers/com.apple.Safari/Data/Library/Preferences/com.apple.Safari.plist(以及父容器的偏好设置),它保存了你通过「Safari > 设置」进行的所有配置:主页、搜索引擎、标签页行为、自动填充、扩展程序启用/禁用等。这是「用户偏好」层。
第二个是 WebKit 功能标志字典,它存储在 com.apple.WebKit.WebContent 的偏好设置中,在 Safari UI 中仅通过「开发 > 功能标志」暴露。这些是 WebKit 实验性行为的独立开关——例如「异步剪贴板 API」、「CSS @scope 规则」、「WebGPU」、「推测规则」、「跨文档视图过渡」等数百个选项。大多数已稳定并默认启用;一些是实验性的,默认禁用;少数已弃用且计划移除。
当 macOS 将 Safari 升级到新的主要版本时,WebKit 会对功能标志字典运行迁移步骤。已从实验性提升为默认的标志会被开启;已删除的标志会被删除;新标志会以默认值插入。迁移代码复杂但历来可靠。
然而,在 26.5 中,迁移存在一个 Bug。具体来说,当实验性标志在 Safari 版本之间更改其「键名」时(这在 WebKit 内部重构功能时偶尔发生),迁移会写入新键,但并不总是删除旧键,导致字典中同时存在两个条目。少数标志还被迁移到新的值类型(从布尔值改为整数枚举,用于三态标志),而 26.5 的运行时代码有时仍以旧类型读取它们,导致 WebKit 内容进程在访问这些功能时崩溃——例如,当合成器在关闭标签页时销毁页面。
结果是,随机抽取的一部分 26.5 用户拥有包含过时或错误类型条目的功能标志字典,当 WebKit 代码路径触及这些条目时,Safari 行为异常。
修复方法是重置功能标志,我们将在下面的修复部分逐步说明。
根本原因二:网络扩展 API 变更
这一问题需要简要了解 Apple 的网络扩展框架。
在 Mac 上,系统级内容过滤 VPN 和广告拦截器(不仅限于 Safari 内部)会安装一个网络扩展。这是 Apple 的框架,允许第三方应用运行接近内核的网络过滤代码。用户在「系统设置 > 通用 > 登录项与扩展 > 网络扩展」中授予权限。此后,系统上开启的每个 TCP/UDP 套接字在离开设备前都可以被该扩展检查、重定向或拦截。
在 26.5 中,Apple 发布了其所称的 Privacy Relay v2——现有 iCloud 私人中继基础设施的扩展版本,现在适用于更广泛的流量,并使用新的内核路由层。新路由层要求网络扩展以略微不同的回调签名进行注册。较旧的网络扩展(任何未针对 26.5 SDK 重新编译的扩展)仍然有效,但内核现在将它们包装在一个兼容性垫片中,这会为每次过滤回调增加延迟。
兼容性垫片正是问题所在。当 Safari 关闭标签页时,WebKit 的内容进程会拆除与该标签页关联的网络连接。每次连接拆除都通过网络扩展过滤,而在兼容性垫片存在的情况下,每次调用可能需要 50 到 500 毫秒。对于一个有二十个活跃连接的标签页(这很正常——一个现代网站会连接到十几个广告和分析域名),拆除过程可能需要数秒,在此期间 WebKit 持有 Safari 其余部分正在等待的锁。Apple 内部针对「进程疑似挂起」的看门狗有时会在此窗口期触发并终止 WebKit 内容进程,Safari 随后将此报告为崩溃。
这解释了网络扩展 VPN 与崩溃模式之间四到五倍的相关性。它也解释了为何崩溃随着 Safari 运行时间的增长而加剧:每次关闭标签页都会泄漏少量兼容性垫片状态,经过数小时的正常使用后,每个标签页的拆除时间已增长到足以可靠触发看门狗的程度。
据报道,Apple 正在与主要 VPN 供应商合作,为新 SDK 重新编译扩展,但截至撰写本文时,尚无任何产品发布。解决办法是禁用内容过滤网络扩展,同时保留 VPN 的隧道功能,后者使用不同的(不受影响的)扩展类型路由。

根本原因三:会话状态格式错误
LastSession.plist 是 Safari 记录上次退出时哪些窗口和标签页处于打开状态的文件。当你启动 Safari 时,它读取此文件并重建你的会话——每个窗口、每个标签页、每个 URL、每个滚动位置。该文件是二进制属性列表,对于普通用户来说通常有几百千字节。
该文件格式是有版本的。每个主要 Safari 版本有时会添加新字段——例如每个标签页的「阅读器模式是否激活」状态、标签页所属的配置文件 UUID,或将标签页带到当前 URL 的最近「导航类型」。当 Safari 打开由旧版本写入的 LastSession.plist 时,它会通过填充默认值来容忍缺失字段。
26.5 无法优雅处理的是相反的情况:包含新版 Safari 无法识别字段的 LastSession.plist。这可能发生在以下情况:你在 26.4 周期中曾运行过 Safari 技术预览版(许多高级用户会这么做)后又恢复到正式版 Safari;或者你在不同小版本的机器之间复制了 Library;某些情况下也可能仅仅因为之前崩溃时会话写入失败。
当 26.5 的 Safari 遇到格式错误的会话条目时,行为取决于哪个字段出错。良性情况是标签页恢复为空白白色——Safari 无法解析导航条目并跳过了恢复。更严重的情况是某个标签页的条目虽然通过了解析,但其内部指针字段不一致,导致 Safari 在正常保存周期中尝试将该标签页的状态写回磁盘时发生崩溃。
修复方法是删除 LastSession.plist 并以全新会话启动。你会(短暂地)失去当前打开的标签页——请参阅下面的恢复步骤——但你将获得一个 Safari 可以可靠读写的干净、一致的会话文件。
修复一:重置 WebKit 功能标志
这是影响最大的单一修复方案,也是应首先尝试的。
第一步 — 启用「开发」菜单。打开 Safari,选择「Safari > 设置」,点击「高级」标签页,勾选底部「为 Web 开发者显示功能」复选框(在某些 26.x 版本中仍标记为「在菜单栏中显示「开发」菜单」)。关闭设置。
第二步 — 打开功能标志面板。将 Safari 切换到前台,点击菜单栏中的「开发」菜单。你应该在顶部附近看到「功能标志」子菜单。点击它。一个独立窗口打开,按类别列出所有 WebKit 功能标志,顶部有搜索框。
第三步 — 重置为默认值。在功能标志窗口右上角,点击「将全部重置为默认值」按钮。(在某些版本中,该按钮位于底部,标记为「恢复默认值」。)确认对话框。Safari 将写入一个干净的功能标志字典,消除升级迁移中的所有过时或类型错误的条目。
第四步 — 完全退出 Safari。「Safari > 退出 Safari」或 Cmd-Q。不要只是关闭所有窗口;WebKit 内容进程在你真正退出并重新启动父进程之前不会加载新的功能标志。
第五步 — 重新启动并测试。打开 Safari,打开几个标签页,正常浏览几分钟,然后关闭一个标签页。如果仍然看到冻结或崩溃,请继续执行修复二。
关于此操作的说明:重置功能标志不会更改你的任何正常 Safari 设置。你的主页、搜索引擎、自动填充、历史记录、书签、阅读列表、扩展程序等均不受影响。唯一改变的是实验性 WebKit 功能的开关状态,甚至在这一点上,也仅限于那些状态已偏离当前默认值的功能。
修复二:禁用 VPN 网络扩展模式
如果你使用 AdGuard、NordVPN、Cloudflare WARP、Surfshark、启用了内容拦截的 Mullvad 或类似产品,此修复适用。
具体措辞因应用而异,但你要找的设置是控制应用是否安装以逐连接方式过滤内容的网络扩展的那个选项。以下是各厂商的具体说明:
AdGuard for Mac: 打开 AdGuard。点击齿轮图标。前往「网络」>「操作模式」。将模式从「自动」或「网络扩展」切换为「自动代理」。应用将自行重新安装为本地 HTTP 代理,而非系统级网络扩展。你在 Safari 中的广告拦截功能继续有效,但不再挂钩到与 Privacy Relay v2 冲突的内核级流量路径。
NordVPN: 打开 NordVPN 应用。设置 > 威胁防护。关闭「威胁防护」开关(你可以让 VPN 连接本身保持开启)。基本 VPN 隧道不使用有冲突的扩展类型。如果你特别想保留威胁防护,NordVPN 的「威胁防护精简版」模式基于 DNS 而非网络扩展,不会触发此 Bug。
Cloudflare WARP / 1.1.1.1: 打开 1.1.1.1 应用。设置 > 高级 > DNS 设置。将模式从「1.1.1.1 for Families」(会安装内容过滤器)更改为普通的「1.1.1.1」或「1.1.1.1 + WARP」。WARP 隧道本身不会触发此 Bug,只有家庭安全内容过滤器才会。
Surfshark: 偏好设置 > VPN 设置 > CleanWeb。关闭。逻辑相同——隧道没问题,内容过滤器才是问题。
Mullvad: 偏好设置 > DNS 内容拦截器。将所有拦截器切换为「关闭」。如果你想在不使用网络扩展的情况下继续拦截,可以使用指向 NextDNS 或类似服务的自定义 DNS。
更改设置后,前往「系统设置 > 通用 > 登录项与扩展 > 网络扩展」,确认相关条目现已关闭(或已完全消失)。退出并重新启动 Safari。测试关闭标签页的行为。
如果你的 VPN 未在上面列出,一般规则是:查找任何说明中提及在网络层面拦截跟踪器、恶意软件、广告或「成人内容」的设置。无论该设置如何命名,它都是通过网络扩展实现的,也是需要为此修复禁用的那个设置。
修复三:删除 LastSession.plist
此操作解决了「恢复时标签页变白」的症状,并有助于消除持续性冻结。
删除文件之前,你可能希望保存当前打开的 URL 以便恢复。最简单的方法是「书签 > 为这 N 个标签页添加书签……」,将所有当前打开的标签页放入一个书签文件夹。请先完成这一步。
然后完全退出 Safari。
打开 Finder。按 Cmd-Shift-G 调出「前往文件夹」。粘贴 ~/Library/Safari/ 并按回车。你应该能看到 LastSession.plist。将它拖到废纸篓。(暂时不要清空废纸篓——如果出现任何问题,你可以将它拖回来。)
在此文件夹中,还有一个值得删除的相关文件:RecentlyClosedTabs.plist。它有时会被影响 LastSession.plist 的同一写入循环 Bug 损坏,同时清除两者可获得最干净的重置效果。
如果你使用多个配置文件,还需要删除 ~/Library/Containers/com.apple.Safari/Data/Library/Safari/Profiles/<UUID>/LastSession.plist 下的每个配置文件会话文件。
重新启动 Safari。它将以全新窗口打开,没有恢复的标签页。打开书签(「显示 > 显示侧边栏」或书签菜单),找到你之前创建的文件夹,右键点击 > 在新标签页中打开。你的上一个会话回来了,损坏的条目已被清除。
修复四:重建 Safari 配置文件
如果你使用 Safari 配置文件(在 macOS Sonoma 中引入,供希望将工作和个人浏览上下文分开的用户使用),且以上修复未能解决特定配置文件的问题,则该配置文件本身可能已损坏。
打开「Safari > 设置 > 配置文件」。记下受影响配置文件的图标、颜色和书签文件夹,以便重新创建。在列表中点击该配置文件,然后点击减号按钮将其删除。确认。(Safari 会询问是否保留该配置文件的书签;选择是——这会将书签导出到主书签栏,让你不会失去它们。)
点击加号按钮创建新配置文件。赋予它与之前相同的名称、图标和颜色。如果需要,将书签拖回新配置文件的书签文件夹。
新配置文件的 WebKit 状态是从默认值全新创建的,而非从 26.4 迁移而来,这完全绕过了迁移 Bug。在我们的测试中,重建配置文件后的崩溃率降至基准噪声水平——即停止崩溃。
修复五:安全模式启动测试
安全模式在这里作为诊断工具有用,不一定是修复手段。
在 Apple 芯片上: 关机。按住电源按钮,直到看到「正在加载启动选项」。按住 Shift 键选择你的启动磁盘,然后点击「以安全模式继续」。
在 Intel 上(26.5 上为数不多的用户): 关机,然后在按住 Shift 键的同时开机,直到出现登录窗口。
安全模式只加载已签名的 Apple 内核扩展,清除多个缓存,并运行基本磁盘检查。重要的是,在 Apple 芯片上它不会卸载网络扩展——这些扩展在用户空间而非内核空间运行,安全模式不影响它们。因此,如果你怀疑是网络扩展导致的问题并想确认,安全模式并非合适的测试手段。
安全模式所测试的是某个第三方内核扩展或登录项是否在助推问题。如果 Safari 在安全模式下正常运行,但在普通启动时崩溃,这指向你的某个第三方启动项——最可能是备份工具、防病毒软件或特定硬件工具——是一个促成因素。在普通启动下,逐一在「系统设置 > 通用 > 登录项与扩展」中禁用可疑项目以识别具体的问题来源。
如果 Safari 在安全模式下仍然崩溃,原因在于你的用户账户偏好设置或系统本身,你应专注于修复一、修复三和修复六。

修复六:清除 WebKit 内容拦截器缓存
如果你安装了任何内容拦截扩展程序(App Store 类型,非 AdGuard——例如 1Blocker、Wipr、Ghostery Lite、App Store 版的 AdGuard for Safari),WebKit 会将其规则编译为二进制格式,并将编译后的规则缓存在 ~/Library/Containers/com.apple.Safari/Data/Library/Safari/ContentBlockerCache/。
26.5 升级更改了编译规则格式。Safari 本应检测版本不匹配并重新编译,但在某些情况下,它会以新格式读取旧缓存并在第一次规则查找时卡死,表现为冻结或崩溃。
要清除缓存,退出 Safari,然后在 Finder 中按 Cmd-Shift-G 并粘贴 ~/Library/Containers/com.apple.Safari/Data/Library/Safari/。找到名为 ContentBlockerCache 或 WebKitContentBlocker 的文件夹,将它们移到废纸篓。Safari 将在下次启动时从你的内容拦截扩展重新编译,这可能需要五到三十秒,期间页面加载会较慢。完成这次重新编译后,一切恢复正常。
为何 WebKit 功能标志会发生偏移
更深层的问题是,功能标志迁移为何会出错。WebKit 自 macOS Sierra 以来一直在进行这些迁移,底层机制已经过充分验证。要理解 26.5 的问题,你需要了解这些标志的存储方式和迁移结构。
WebKit 功能标志在文件格式层面是 com.apple.WebKit.WebContent 偏好设置 plist 中的一个条目(以及 Safari 自有偏好设置中 Safari 管理标志的并行条目)。每个条目有一个键、一个值和一个隐式类型。键是诸如 WebKitPreferences.CSSCascadeLayersEnabled 或 WebKitCSSScopeRuleEnabled 之类的字符串。值过去始终是布尔值。从 WebKit 619(在 macOS 26.0 中发布)开始,部分标志采用三态并使用整数枚举(0 = 关闭,1 = 开启,2 = 默认),以便 Safari 能够区分「用户明确开启了此功能」与「用户未更改此功能的默认值」。
WebKit 的偏好设置读取器加载偏好 plist 时,会遍历字典,并根据每个已知标志当前声明的类型解析其值。对于未知标志,它将其保留在原处但予以忽略。
在操作系统升级后首次启动时运行的迁移步骤应该:
- 遍历新 WebKit 版本中所有已知标志的列表。
- 对于每个自上一版本以来键已更改的标志,将值从旧键复制到新键,并删除旧键。
- 对于每个类型已更改的标志,转换值(布尔值到整数枚举,或反之)并写回。
- 对于每个在新版本中已删除的标志,从 plist 中删除该条目。
- 其他一切保持原样。
26.5 中的 Bug 在于第二步。有一个特定代码路径处理同一功能类别内的重命名(例如,WebKitExperimentalCSSScopeRuleEnabled 在功能从实验性升级为默认后被重命名为 WebKitCSSScopeRuleEnabled)。该代码路径写入了新键,但并不总是删除旧键。下次启动时,偏好设置读取器看到逻辑上同一标志的两个条目,并选择其中一个(基于字典迭代顺序,plist 的字典迭代顺序是未定义的),这意味着标志的实际状态取决于偏好设置读取器中的哈希碰撞。
另一个独立但相关的 Bug 影响了类型已更改的标志。26.5 中的迁移代码在类型转换表中存在逐一错误;一些本应从布尔值转换为整数枚举的标志被保留为布尔值,Safari 的三态代码路径随后将它们作为整数读取,并以错误的字节序解释布尔值的 0/1 存储布局,产生 0(关闭)或一个非常大的垃圾值。该垃圾值被用作功能状态查找表的索引时,会导致内存访问超出表的范围——进而崩溃。
「开发」菜单的「将全部重置为默认值」按钮通过删除字典中的所有条目并按当前版本预期的名称和类型写入全新集合来完全绕过迁移,这就是为什么此修复如此有效。
VPN/AdGuard 网络扩展冲突详解
网络扩展框架记录在 Apple 的《网络扩展编程指南》和 NetworkExtension.framework 头文件中。特别是,NEFilterDataProvider 和 NEFilterPacketProvider 类是内容过滤应用子类化以完成其工作的入口点。
WebKit 网络进程与网络扩展之间的协议概念上很简单:对于 WebKit 打开的每个套接字,内核将套接字路由到活跃的过滤提供者;提供者对每个新数据事件返回判定(允许、拦截、重定向);WebKit 根据判定采取行动。该协议是异步的——WebKit 提交请求后继续执行;过滤器在能够时给出答复。对于大多数请求,答复几乎是即时的(远低于一毫秒),异步性是不可见的。
26.5 的变化在于内核如何构建过滤提供者调用。以前,调用上下文在每个套接字上建立一次并在套接字生命周期内复用。在 26.5 中,随着 Privacy Relay v2 路由层的引入,上下文在每次判定请求时重新构建,以支持新中继的每请求路由决策。对于针对 26.5 SDK 编译的过滤器,重建速度很快——约 50 微秒。
对于针对早期 SDK 编译的过滤器(即目前所有已发布 VPN 的过滤器),重建通过兼容性垫片进行。该垫片必须将新的上下文格式转换为过滤器所期望的旧格式,调用过滤器,然后将响应转换回来。该垫片在用户空间而非内核中实现——Apple 的有意设计选择,以避免强制第三方代码通过新的内核路径——用户/内核转换每次调用约增加 200 到 500 微秒。
对于一个有大约 100 个子资源请求的典型网页,垫片带来的总过滤开销为 20 到 50 毫秒。可见但不致命。灾难性的情况是关闭标签页,WebKit 在短时间内执行大量套接字拆除。每次拆除都会调用过滤器以确定套接字是否可以干净地拆除或需要先刷新。有垫片开销时,二十次套接字拆除可能需要 10 毫秒;加上我们之前提到的每个标签页的垫片状态泄漏,这一数字可能增长到数秒。在这数秒内,WebKit 持有 Safari 其余部分需要运行的锁,操作系统看门狗可能决定 WebKit 已挂起并将其终止。
最干净的修复是 Apple 最终会发布的那个:VPN 供应商针对 26.5 SDK 重新编译,垫片将不再需要。在此之前,完全禁用网络扩展层(修复二)是消除延迟的唯一方法。
如何判断你的问题属于哪种原因
以下是一个简短的决策树。
你是否使用内容过滤 VPN(AdGuard、启用了威胁防护的 NordVPN、Cloudflare 1.1.1.1 for Families、带 CleanWeb 的 Surfshark 等)? 如果是,从修复二(禁用网络扩展)开始。如果这解决了崩溃,你遇到的是网络扩展类型的 Bug,操作完成。如果未解决,继续进行。
崩溃或重新启动后,标签页是否恢复为空白白页? 如果是,修复三(删除 LastSession.plist)直接解决该问题。应用它。
Safari 是否在崩溃前冻结数秒,同时磁盘活动疯狂? 如果是,会话写入循环是原因之一——再次执行修复三,如果你安装了内容拦截器,还需考虑修复六(清除内容拦截器缓存)。
无论 VPN 状态如何,Safari 是否在每次关闭标签页时崩溃? 修复一(功能标志重置)是最可能的解决方案。应用它。
应用修复一、二、三和六后 Safari 是否仍然崩溃? 如果你使用配置文件,尝试修复四(重建配置文件),然后将修复五(安全模式测试)作为诊断手段。如果安全模式下仍然崩溃,下一步是 Safari 容器重置,详见下文。
Mail.app 是否与 Safari 同时出现问题? Mail 不需要单独的修复;它使用相同的 WebKit 框架,相同的修复方法(尤其是修复一和修复二)也能解决 Mail 症状。应用 Safari 修复后,退出并重新启动 Mail。
何时完全重置 Safari
如果你已完成上述所有六项修复,Safari 仍然崩溃,剩余选项是完整的 Safari 容器重置。这比以上任何修复都更激进,你需要先进行备份。
执行任何破坏性操作之前,确保你的数据已同步或导出:
- 书签: 「文件 > 导出书签……」会生成一个 HTML 文件,你可以稍后重新导入。将其保存在 Safari 容器外的位置——桌面即可。
- 历史记录: 如果启用了 iCloud Safari(系统设置 > Apple ID > iCloud > 已存储到 iCloud > Safari),Safari 会自动将历史记录同步到 iCloud。确认开关已开启。如果不使用 iCloud Safari,你的历史记录将会丢失——确保你已提取所需的所有 URL。
- 阅读列表: 通过 iCloud Safari 同步,与书签相同。确认同步已开启。
- 已保存的密码: 存储在 iCloud 钥匙串中,不在 Safari 容器内。安全。
- 扩展程序: 需要从 App Store 重新安装。记录你实际使用的扩展程序列表。
备份完成后,退出 Safari,然后在终端运行:
mv ~/Library/Containers/com.apple.Safari ~/Library/Containers/com.apple.Safari.old
mv ~/Library/Safari ~/Library/Safari.old
mv ~/Library/Preferences/com.apple.Safari.plist ~/Library/Preferences/com.apple.Safari.plist.old
这将重命名 Safari 存储用户数据的三个位置,相当于给你一个全新的 Safari 安装。重新启动 Safari。它将表现得好像你从未使用过它一样。iCloud 将在几分钟内重新同步书签、历史记录和阅读列表。重新安装你的扩展程序。
如果 Safari 在此状态下仍然崩溃——拥有全新容器且没有任何第三方数据——原因在于操作系统本身而非你的用户数据。此时你的选择变窄:等待 26.5.1 或 26.6 修复;通过 Time Machine 恢复降级到 26.4.1(Apple 在发布后 90 天内允许此操作);或者提交反馈助理报告并附上崩溃日志。
如果全新安装有效,你可以选择性地从 .old 目录复制特定数据——先是书签,然后是阅读列表,然后是任何特定文件——并确定是哪一部分旧用户状态导致了崩溃。在我们的测试中,格式错误的 LastSession.plist 或损坏的功能标志条目是每次崩溃的原因,而修复一和修复三已经解决了这两者,因此完整容器重置很少能发现新信息。
Mail 应用的副作用
Mail 使用 WebKit 框架来渲染它显示的每封邮件的 HTML 正文。使用的 WebView 并非完整的 Safari——它没有标签页、没有扩展程序,JavaScript 运行时也受到更多限制——但底层合成器、布局引擎、网络堆栈(用于加载嵌入式图片)和内容拦截器管线是共享的。
这意味着我们上面讨论的每个 Bug 也可能在 Mail 中出现。由于 Mail 没有可以关闭的标签页,症状集略有不同,但故障模式映射清晰:
- Mail 在打开 HTML 新闻邮件时冻结数秒。 这与根本原因二中描述的网络扩展延迟相同。新闻邮件通常有数十个嵌入式图片和跟踪像素;每个外部请求都经过 Safari 请求使用的同一网络扩展。修复二(禁用网络扩展)可消除冻结。
- Mail 在将 HTML 邮件标记为已读时崩溃。 「标记为已读」操作会触发邮件状态的保存,在某些 26.5 版本中这还会触发邮件正文的部分重新布局。如果 WebKit 功能标志处于根本原因一所描述的损坏状态,重新布局可能会崩溃。修复一(功能标志重置)可消除此问题。
- Mail 启动后显示空白白色邮件正文。 Mail 在类似 Safari
LastSession.plist的会话文件中缓存最近查看的邮件渲染。Mail 的等效文件位于~/Library/Mail/V11/MailData/,包含Envelope Index和每个账户的状态文件。损坏的 Mail 会话具有相同的白色渲染症状。修复更复杂(Mail 的数据结构比 Safari 更复杂),但最简单的版本是退出 Mail,然后按住 Shift 重新启动,这会触发 Mail 的从服务器重建程序。
一般规则是:如果你应用了 Safari 修复且 Safari 现在已稳定,但 Mail 仍然有问题,请完全退出 Mail(Cmd-Q,而不仅仅是关闭窗口)然后重新启动。Mail 在启动时会重新读取其偏好设置和已更正的 WebKit 状态。
常见问题
Apple 会在 26.5.1 中修复此问题,还是我需要现在采取行动? Apple 尚未宣布 26.5.1 的具体发布时间表,但根据 26.4.1 和 26.3.1 的节奏(分别在其父级 .x 版本发布后约四到六周发布),2026 年 6 月某时发布 26.5.1 是合理的预期。无论如何,请立即应用修复一;它是无破坏性的,能立即解决最常见的原因,而无需等待数周。
这是否影响 iOS 上的 Safari,还是仅影响 macOS? WebKit 功能标志迁移 Bug 在 iOS 和 macOS 之间是共享的,但对 iOS 用户的影响较小,因为 iOS 用户安装内容过滤 VPN 的频率远低于 Mac 用户。iOS 26.5 用户报告了一些标签页恢复问题,但很少有关闭标签页时崩溃的情况。iOS 上的修复方法也不同——iOS 不提供「开发」菜单,因此功能标志重置必须通过「设置 > 应用 > Safari > 高级 > 实验性功能 > 重置」进行。
如果我降级到 26.4.1,我的数据是否安全? 通过 Time Machine 降级会从升级前的完整系统状态恢复,包括你的 Safari 数据。通过 26.4.1 安装镜像重新安装降级会保留你的主目录,但 Safari 可能会对由较新版本写入的用户数据发出警告。更安全的路径是 Time Machine。Apple 记录的降级窗口为 90 天,因此你有到 2026 年 8 月初的时间来做出决定。
我禁用了 VPN 的网络扩展,现在广告拦截消失了。有什么替代方案吗? 有——切换到基于 DNS 的拦截器。NextDNS、Control D 或 AdGuard 的 DNS 级服务(与其网络扩展应用分开)都提供系统级广告和跟踪器拦截,无需使用网络扩展 API。在「系统设置 > 网络 > 你的活跃接口 > 详细信息 > DNS」下进行配置。性能相近;唯一的损失是每个应用的细粒度控制。
「开发」菜单没有显示「功能标志」子菜单——我用的是什么版本? 功能标志作为「开发」菜单顶层条目是在 Safari 17 中引入的。如果你看不到它,你使用的是较旧版本的 Safari,这也意味着你使用的 macOS 比 26.5 旧得多。在这种情况下,本文描述的整个问题都不适用于你。在「Safari > 关于 Safari」下确认你的版本。
重置功能标志是否会破坏任何网站? 不会。功能标志控制哪些实验性 WebKit 功能被启用;每个标志的默认状态是 Apple 测试最广泛的状态。重置为默认值会将你置于 Apple QA 测试的状态,这比任何自定义配置与互联网的兼容性都更高。唯一可能出现问题的网站是那些专门针对你启用的实验性功能的网站——实际上,几乎没有。
在此问题修复之前,我是否应该使用 Safari 技术预览版而非正式版 Safari? 可能是的。STP 197(于 2026 年 5 月 7 日发布)在 26.5 之前发布,附带了已更正的功能标志迁移代码,因此在全新 STP 安装上不会发生功能标志损坏的故障模式。但 STP 并不能修复网络扩展问题——那是影响所有 WebKit 客户端的系统级 Bug。如果你的症状是修复一类型的,STP 有帮助;如果是修复二类型的,则没有。STP 也可以与正式版 Safari 并存而不产生冲突,因此将其作为备用浏览器安装风险很低。
结论
macOS 26.5 的 Safari 崩溃不是一个 Bug,而是三个,「我只需重置 Safari」的懒惰方法在丢失数据的同时无法解决这三个问题。按可能性和工作量排序:修复一(WebKit 功能标志重置)以最低风险解决最多用户的问题;修复二(网络扩展模式更改)解决使用内容过滤 VPN 的用户遭遇的最严重崩溃;修复三(删除 LastSession.plist)解决「恢复时标签页变白」和「写入时冻结」症状。其余修复针对更小的用户群体。
如果你已应用修复一和修复二,Safari 仍然有问题,请按顺序完成其余修复,而非直接跳到完整容器重置。两到三项有针对性修复的累积效果始终优于「清空一切」的方法,而且你之后不必花一个小时重新安装扩展程序和重新配置偏好设置。
最后,如果你仍在使用 26.4.1 并考虑是否升级,截至 2026 年 5 月中旬,诚实的建议是等待。26.5 中的大多数新功能是服务器端改进,无论操作系统版本如何,都将在未来数周内推送到 26.4.1,而安全修复——虽然是真实的——本身还没有严重到足以证明接受一个明显更不稳定的 Safari 是值得的。等待 26.5.1,然后再升级。
有关更广泛的 26.x 故障排除背景,请参阅我们的26.x 周期完整 Bug 追踪器和配套的 Safari 及系统稳定性指南(26.2 版)。如果 Mail 也在出问题——当 Safari 出问题时通常如此——请参阅我们的 Mail 专项修复指南。从之前基准版本迁移过来的用户应阅读 26.4 / 26.4.1 更新指南,了解版本之间的变化背景。如果你在 Safari 修复之上还需要持续的安全软件,我们的 2026 年防病毒和安全指南介绍了哪些工具使用网络扩展,哪些使用替代架构。
撰写本文时参考的资料来源包括:MacRumors 论坛帖子 2481881(26.5 RC 错误修复及发布后讨论)、Apple Developer 论坛上关于 WebKit 26.5 功能标志迁移的多个帖子、Apple 关于启用 Safari 「开发」菜单的官方支持文档,以及 Howard Oakley 在 Eclectic Light 上的详细分析「macOS Tahoe 26.5 有何变化」。当论坛报告相互矛盾时,我们在将其纳入本文之前已在多台机器上本地复现了该行为。
