点 GitHub 上一个文件链接,有时不如直接在新标签页打开来得快。
这个反常点很小,但很刺眼。浏览器最擅长的事,本来就是打开链接。可现在,很多网站偏要用大量 JavaScript 接管点击、滚动、选择、表单输入。页面看着更现代,用户却要重新学习怎么滚动、怎么选日期、怎么填密码。
Susam Pal 最近写了一篇文章,标题借用了软件安全圈的老话:Don't roll your own crypto,不要自己造加密。
这句话不是说没人会写加密算法。它真正提醒的是:生产环境里保护用户数据,不该依赖未经充分验证的私货。网页交互当然不是密码学,坏掉的滚动条也不等于加密失效。但类比成立:浏览器长期验证过的基础交互,很多网站没有必要再造一遍。
Pal 在批评什么
Pal 批评的不是所有自定义 UI。有些业务场景确实需要定制,复杂编辑器、专业设计工具、游戏化界面,都可能有自己的理由。
他真正反感的是另一类东西:浏览器原生能力已经够用,网站仍然为了风格、控制感或组件统一,把它替换掉。
| 被重造的东西 | 浏览器本来解决了什么 | 乱改后的常见代价 |
|---|---|---|
| 页面滚动 | 鼠标、触控板、键盘滚动预期稳定 | 速度怪、键盘失效、手感陌生 |
| 链接跳转 | 打开、后台打开、新标签页、历史记录 | JS 接管后变慢、复杂、不可预期 |
| 密码框 | 密码管理器、自动填充、安全提示、移动键盘、无障碍工具 | 可能破坏填充、提示和辅助能力 |
| 日期选择器 | 原生输入、键盘输入、系统一致性 | 每个网站一套日历,用户被迫重学 |
| 频繁改版 | 稳定记忆和操作路径 | 低频用户、老年用户成本最高 |
GitHub 是他点名较多的例子。点击文件或 issue 链接时,导航会被 JavaScript 接管。Pal 的说法很克制:不是说 GitHub 故意拖慢,也不是恶意拦截,而是这种接管可能引入延迟和复杂性。讽刺的是,有时新标签页反而更快。
密码框更敏感。<input type="password"> 不只是把字符显示成圆点。它还和密码管理器、自动填充、强密码生成、不安全 HTTP 警告、移动端键盘、读屏软件配合。
你做一个假的密码框,可能把这些能力一起打碎。多数自定义控件的问题只是难用,密码框的问题更接近安全边界和可访问性边界。
日期选择器也类似。<input type="date"> 不完美,比如不直接支持日期范围。但 Pal 的主张不是迷信原生控件,而是优先保留原生入口。要范围,可以给开始日期和结束日期两个输入框。要增强,可以在旁边加控件,而不是把原生输入整个替换掉。
这事为什么重要
我更在意的,不是某个日期控件难不好用,而是现代前端对“控制”的迷恋。
团队想控制滚动手感,控制点击路径,控制菜单样式,控制表单行为,控制用户每一次微小动作。产品经理看到的是一致性,设计师看到的是品牌感,前端工程师看到的是组件化和可复用。
用户看到的往往是:我熟悉的浏览器突然不听话了。
这不是单纯的审美分歧。它是控制权转移。原本属于浏览器和用户的默认能力,被网站收回到自己的脚本、组件库和埋点系统里。
成本分布也不公平。
会写代码的人还能打开开发者工具吐槽两句。普通用户只会觉得“这个网站难用”。老年用户更惨,每次界面大改,都像家里的洗衣机按钮一夜之间重新排列。依赖键盘、读屏软件、辅助工具的人,甚至会被直接挡在门外。
对前端开发者和产品经理,这件事的动作层含义很简单:
| 角色 | 该少做什么 | 该多看什么 |
|---|---|---|
| 前端开发者 | 少把原生链接、滚动、输入框一把接管 | 键盘操作、自动填充、读屏、历史记录、打开新标签页是否正常 |
| 产品经理 | 少把“统一视觉”和“沉浸跳转”当默认收益 | 改版后低频用户、老年用户、辅助工具用户是否多付了学习成本 |
| 长期被网页交互折磨的技术读者 | 少把每次难用都归因于自己不熟悉 | 观察网站是不是替换了浏览器原生行为,必要时用新标签页、禁用脚本、换浏览器绕开 |
这里的判断标准不复杂:
如果自定义控件不能明显增加能力,就别替换原生控件。
如果替换后破坏键盘、自动填充、历史记录、新标签页、读屏,那就不是升级。
如果只是为了看起来更统一,更要小心。
“规则越基础,越不该炫技。”网页里的滚动、链接、输入,就像城市路口的红绿灯。你可以把灯做得更漂亮,但不能让每条街都有一套独创规则。
接下来该看什么
这类问题短期不会消失,因为它背后的激励很硬。
重造控件容易被看见。顺滑动画、统一组件库、沉浸式跳转,很容易写进改版总结。保留原生链接、保留原生输入、少动用户路径,看起来像没做事。
于是网页越来越精致,也越来越脆。高级感成了 KPI 的皮肤,稳定性反而没人领赏。
但也不能把话说满。不是所有自定义 UI 都错。复杂业务、跨端一致性、特殊输入场景、专业工具,都可能需要更强的组件。真正的分水岭不在“是不是原生”,而在有没有保住用户原本的能力。
接下来观察三件事就够了:
- 链接是否仍能正常复制、后台打开、新标签页打开、保留历史记录。
- 表单是否仍支持密码管理器、自动填充、键盘操作、移动端正确键盘和辅助工具。
- 改版是否只提升视觉统一,却让低频用户重新学习路径。
历史上成熟基础设施都经历过类似阶段。铁路早期轨距不一,电力早期标准混乱,早期浏览器私有标签满天飞。情况不完全一样,但重复的是同一种冲动:谁都想用自己的规则占住入口。
最后真正省下社会成本的,往往不是最会炫技的那套,而是最多人不用思考就能使用的标准。
“天下熙熙,皆为利来。”今天很多网页交互的异化,也不只是开发者手痒。背后有品牌、有留存、有数据、有埋点、有转化漏斗。问题是,当每一次点击都被当成可优化对象,用户的默认权利就会被一点点拆走。
Pal 这篇文章值得读,也正在这里:它表面上是在抱怨滚动条、链接和日期框,实际是在提醒我们,浏览器原生能力不是低级替代品。
它们是多年兼容性、可访问性、用户习惯和安全边界沉淀出来的公共财产。
能不重造,就别重造。
产品真强,不靠抢浏览器的活来证明。
