Featured image of post 浏览器的地址栏除了输入网址还能干什么?——玩贪吃蛇

浏览器的地址栏除了输入网址还能干什么?——玩贪吃蛇

 

浏览器的地址栏除了输入网址还能干什么?——玩贪吃蛇

当一个十年前的疯狂创意重新走红,它揭示了互联网正在失去的东西

打开Chrome浏览器,在地址栏输入 https://demian.ferrei.ro/snake# ,然后 你就看到一串奇怪的符号。
是的,你没看错。就盯着你的地址栏,在用箭头键或WASD控制方向。
你会看到一条由奇怪符号组成的小蛇(░░░░░░░⠠⠤⠄⡀░░)在地址栏里爬行,吃掉食物,越长越长。整个游戏就在那个你平时只用来输入网址的细长文本框里运行。
Area

没错,这是一个完整的贪吃蛇游戏,运行在浏览器的URL地址栏里。

上周,这个十年前的项目突然在Hacker News上爆红,获得840个点赞和数百条评论。人们的第一反应都是:“这太疯狂了,你们是怎么想出来的?”

但更疯狂的是这个游戏背后的故事——以及它揭示的关于现代互联网的真相。

一次偶然的好奇心,引发了一场技术冒险

创作者Francisco Uzo回忆起项目的起源时说:“我想知道盲文系统是怎么工作的。”

这就是极客精神的起点——不是为了解决问题,而是纯粹的好奇。

当他深入研究盲文时,发现了一个迷人的规律:每个盲文符号由2x4的点阵组成,8个点位,每个点有"凸起"或"平坦"两种状态,正好产生2^8=256种可能的组合。而Unicode系统完整收录了所有这256个盲文字符。

某天的凌晨三点,他突然意识到:“等等,这不就是一个现成的8位像素字符集吗?”

这种顿悟的瞬间,正是每个极客最享受的时刻——当两个看似无关的知识点在脑海中碰撞,迸发出创意的火花。

然后就是典型的极客行为模式:不管有没有用,先做出来再说
整个实现充满了黑客思维:

  • 将游戏世界映射到盲文字符网格——每个字符就是一个2x4像素块
  • 蛇的身体用实心点(⣿)表示,空白区域用空盲文(⠀)表示
  • 使用JavaScript的history.replaceState()API实时更新URL而不污染历史记录
  • 每帧刷新,整个游戏画面就在地址栏里流畅运行

Francisco的透明度也很"极客":“源代码没有任何压缩或混淆处理。Ctrl+U就能看到全部代码。“整个实现只用了几百行JavaScript,简洁而巧妙。在真正的极客眼中,代码本身就应该是可读的、可学习的、可启发的。

等等,我的游戏怎么看起来乱七八糟的?

如果你现在打开这个游戏,很可能会看到一堆奇怪的%20、反斜杠和乱码。游戏勉强能玩,但画面支离破碎。或者根本不能动起来。

这不是你的问题,也不是代码的问题。问题在于:十年过去了,浏览器变了。

Francisco在讨论中坦言:“这个项目是为十年前的浏览器设计的。自那以后,浏览器进行了一些所谓的’安全改进’,严重削弱了基于地址栏的游戏能力。”

最致命的改变是:现代浏览器开始强制转义URL中的所有空格字符。

在游戏的设计中,空盲文字符(⠀)代表空白区域。但现代浏览器把它们转义成%20或其他字符,导致画面变形。Francisco甚至开发了一套基于Canvas的字体测量系统来检测和替换被转义的字符,但效果仍然有限。

他在浏览器的问题追踪器中提出了申诉。开发者表示理解和同情,但最终的决定是:“安全性照例压倒了趣味性。”

用户报告的游戏体验差异巨大:

  • 有人在Chrome上轻松得到2144分
  • 有人在Firefox上看到满屏乱码
  • 有人在移动Safari上根本看不到游戏
  • 有人的浏览历史被每一帧都污染了

同一个代码,在不同浏览器上的表现天差地别。这就是现代Web开发的现实。

那些年,我们在浏览器里玩过的花样

地址栏贪吃蛇不是唯一一个这类创意项目。Hacker News的讨论中,大家开始回忆起一整个"非常规浏览器游戏"的黄金时代。

URL里的2048游戏

有人分享了 https://aquova.net/games/2048/ ——将风靡一时的2048益智游戏移植到地址栏中。同样的盲文字符技巧,同样的实时URL更新。

浏览器标题栏的贪吃蛇

Francisco提到,Reddit上最近有人发布了新版本——把游戏渲染在浏览器标签页的标题里。虽然这是一种"认输方案”(放弃了在地址栏显示的坚持),但它确实避免了URL转义的问题。

TinyJS贪吃蛇

2023年,另一个开发者用不同的技术路径实现了类似的项目。那时浏览器的限制还没有这么严格。

地址栏3D漫游

有人分享了一个更疯狂的项目:用非常规方式在浏览器中实现交互式3D世界
评论者说:“虽然不是Doom,但你可以在3D世界里四处走动。”

这些项目有什么共同点?它们都是程序员纯粹出于好奇心和乐趣的创造。

没有商业价值,没有实际用途,甚至算不上"最佳实践”。但它们代表了早期互联网的一种精神:这是一个可以玩耍、可以实验、可以突破界限的地方。

为什么这些项目现在越来越难做了?

问题不只是空格转义。过去十年,浏览器经历了大量"安全改进":

历史API的限制

Francisco最初使用history.replaceState()来更新URL而不创建历史记录。但现代浏览器对这个API的调用频率有严格限制。当游戏帧率太高时,系统被迫降级到location.hash方案——结果是你的浏览历史被每一帧游戏都污染了。

一位用户吐槽:“我最烦的就是这个。访问某些网站后查看历史记录,发现被我输入的每个按键都创建了条目。这一切都是以’用户体验’的名义。”

URL长度限制

不同浏览器对URL长度有不同的限制,从2000字符到几万字符不等。对于需要在URL中编码整个游戏状态的项目来说,这是个硬性天花板。

字符集限制

越来越多的特殊Unicode字符被标记为"不安全",在URL中被自动转义或过滤。这直接打击了所有基于Unicode艺术的创意项目。

移动端兼容性

许多移动浏览器根本不显示完整的URL,或者在用户滚动时隐藏地址栏。这让地址栏游戏变得不可玩。

Francisco总结道:“自那以后,浏览器的许多改变都让这类项目越来越难实现。我在浏览器问题追踪器中得到了一些同情,但安全性总是优先的。”

当安全性扼杀了互联网的乐趣

这里出现了一个根本性的矛盾。

**没人会反对浏览器安全性的提升。**URL注入攻击、跨站脚本漏洞、钓鱼网站——这些是真实存在的威胁,影响着数十亿用户。浏览器开发者有责任保护用户安全。

但与此同时,每一次"安全改进"都关闭了某些创造性实验的大门。

Francisco的游戏十年前完美运行,今天却在大多数浏览器上支离破碎。不是因为代码有问题,而是因为浏览器"进化"了。这种"进化"让用户更安全,但也让互联网变得更加统一、更加受控、更加……无聊。

失去的不仅仅是游戏

在Hacker News的讨论中,有人提出了尖锐的批评:“为什么人们不去做有用的事情?别滥用互联网。”

这个评论遭到了社区的集体反驳:

  • “制作这类项目的学习价值是巨大的”
  • “创造性休息和技能开发同样重要”
  • “这就是我来Hacker News的原因——100%的黑客精神”
  • “ChatGPT发明不出这个。我爱这种创造力”

最精辟的回应来自一位用户:“对普通人来说这可能不算什么,但对我来说这太疯狂了。你们是怎么想出这些东西的?”

**这就是问题的核心。**这些项目的价值不在于"有用",而在于它们代表了一种纯粹的创造冲动——因为好奇而探索,因为有趣而创造,因为"为什么不试试"而突破界限。

当我们为了安全而设置越来越多的限制,我们不只是在关闭安全漏洞,我们也在关闭创新的可能性。

权衡是必要的,但我们应该意识到代价

这不是在指责浏览器开发者。他们面对的是极其艰难的权衡决策:

  • 允许灵活的URL编码 vs. 防止注入攻击
  • 支持高频API调用 vs. 避免性能问题
  • 显示任意Unicode字符 vs. 防止钓鱼欺诈

没有完美的答案。 每个决定都有其代价。

但我们至少应该意识到并讨论这些代价。当我们说"安全第一"时,我们应该问:“我们因此失去了什么?“当我们说"用户体验优化"时,我们应该问:“这优化了谁的体验?”

Francisco在浏览器问题追踪器中得到的回复是典型的:“我理解你的困扰,但安全性必须优先。“这个回答在技术层面无可指摘,但它也代表了一种更广泛的趋势:在现代互联网上,控制和安全正在系统性地压倒创造和乐趣。

在AI时代,这种人类创造更加珍贵

当讨论转向AI时,Francisco说了一句发人深省的话:

“这个游戏已经存在十年了,所以很可能在这些AI的训练数据中。机器人也许能复制它,但它们肯定无法享受它!(至少现在还不能)”

这句话触及了当前技术文化的核心焦虑。在ChatGPT可以瞬间生成代码、Copilot可以自动补全函数的时代,什么样的编程项目还值得人类去做?

答案可能就在这个地址栏贪吃蛇里。

AI可以看到盲文字符,可以理解Unicode编码,可以生成JavaScript代码。但AI不能体验:

  • 凌晨三点突然意识到"盲文可以当像素"的那一刻顿悟
  • 第一次看到蛇在地址栏里动起来时的惊喜
  • 花几个小时调试字符转义问题时的执着
  • 十年后看到陌生人喜欢你的项目时的满足感

这些纯粹的人类创造体验,在AI可以复制几乎所有代码的时代,反而变得更加珍贵。

Francisco的项目不是为了解决问题而创造,而是为了探索和乐趣而创造。这种动机,这种过程,这种纯粹的创造喜悦——这是AI永远无法真正拥有的。

我们需要更多像这样的项目

这个地址栏贪吃蛇重新走红,不是因为它特别有用或特别赚钱。它走红是因为它提醒了我们一些重要的事情:

互联网不应该只是一个高效、安全、标准化的工具。它也应该是一个充满惊喜、可以玩耍、可以实验的地方。

当Francisco十年前问自己"盲文是怎么工作的"时,他不是在解决商业问题或优化用户体验。他只是好奇,然后他创造了一个让数千人微笑的项目。

在这个越来越同质化、越来越"安全”、越来越被算法优化的互联网上,我们需要更多这样的项目。不是因为它们有用,而是因为它们提醒我们:

技术的意义不仅仅是效率和安全——它也应该是充满惊奇和乐趣的。

在这个游戏上你能得多少分?你的浏览器支持得好吗?

也许更重要的问题是:这个项目让你想起了什么?你有没有做过类似的"无用但有趣"的创造?

Licensed under CC BY-NC-SA 4.0
最后更新于 Oct 02, 2025 14:53 CST
使用 Hugo 构建
主题 StackJimmy 设计