Summary

  • W3C 2010 年工作草案指出,:visited、选择器查询和 getComputedStyle() 可把访问历史泄露给网页。Mozilla 随后设计让读者仍能看到已访问颜色,但让页面脚本取得未访问样式值。
  • Chrome 136 于 2025 年 4 月发布,按目标网址、顶层网站和框架来源划分已访问状态。第三方网页不会继承别处点击留下的紫色;同站点内部链接有明确例外。

一条链接变紫,本来只想告诉读者:“这里你来过。”网页却也能把一组网址摆出来,观察哪些被浏览器染色。W3C 2010 年 1 月的 Selectors API Level 2 工作草案把风险讲得很直白:选择器查询和 getComputedStyle() 都可能成为问路工具,草案还写了 querySelectorAll(":visited") 的示例。这是当时的设计警报,不是对所有浏览器行为的统计。

把紫色完全抹掉,读者也会失去路标。Mozilla 2010 年 3 月的安全说明选择了更精细的一招。当时正准备进入 Firefox 开发树的改动,让已访问链接只能在颜色上表现差异,避免尺寸、位置或额外资源暴露状态;两种状态的排版路径更接近;页面脚本用 getComputedStyle() 询问时,收到未访问链接的值。浏览器对人显示紫色,对代码交出蓝色的档案。

这招保留了浏览器里一份范围很广的记忆,只是在网页来问时遮住了答案。Chrome 2025 年 4 月的说明把旧问题说清:从 A 点击去 B 后,C 网站若也放一个指向 B 的链接,过去它可能同样显示为已访问。C 没见过 A 的点击,却能得到一条线索。紫色原本为读者画路径,反过来给旁观者当了路标。

Chrome 136 的发布说明记载其稳定版日期为 2025 年 4 月 29 日,并列出访问状态分区。浏览器将目标网址、顶层网站和发起点击的框架来源一起记下。A 上点开的 B,回到 A 时仍可显示已访问;C 的 B 链接拿不到 A 的那次记忆。指向本站页面的链接有受限例外,因为本站本来能观察自己的页面访问。

W3C 2026 年 1 月的 Selectors Level 4 工作草案把路线并列展示:可以不匹配 :visited,可以限制样式与脚本可读信息,也可以只显示来源本来有能力观察到的访问。附录给出的记录包含目标网址、点击起点的来源与顶层网站。这仍是草案,展示的是标准设计空间。问题已经从“代码能否读到紫色”推进到“哪间屋子有资格看见紫色”。

紫色链接没有退休。它仍帮读者少走回头路。Mozilla 曾把记忆藏在脚本够不到的地方;Chrome 136 则把各站能见到的那部分记忆分开。读者的旧路还在,陌生网页的耳朵远了。