news 2026/9/16 20:22:16

Thorium 网络错误页资源剖析:neterror 模板、精灵图定制与离线恐龙游戏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Thorium 网络错误页资源剖析:neterror 模板、精灵图定制与离线恐龙游戏

Thorium 网络错误页资源剖析:neterror 模板、精灵图定制与离线恐龙游戏

【免费下载链接】thoriumChromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of the README.md.项目地址: https://gitcode.com/GitHub_Trending/th/thorium

Thorium 的src/components/neterror目录承载了浏览器所有网络错误提示页(interstitial)的 HTML 模板与静态资源,并在此基础上定制了离线状态下可玩的“恐龙跑”游戏,包括背景音轨与街机模式扩展。本文以 README.md 为主线,结合仓库中的 neterror.html 模板与 offline.js 源码,逐层拆解错误页的资源组织方式、HiDPI 图像策略与音轨定制,帮助理解 Chromium 分支如何在不改核心代码的前提下替换错误页体验。

一、目录定位与整体结构

原始 README 说明了该目录的职责:存放“在获取根文档或 iframe 时收到网络错误”所展示的 HTML 模板与资源,错误页可在chrome://network-errors页面中通过列表链接直接预览;同一套模板被所有桌面与移动平台、主框架与 iframe 共用;目录同时包含 Thorium 恐龙游戏的脚本与图像。

从仓库实际文件布局看,resources/下的组织方式为:

  • neterror.html:错误页 Jinja2 模板;
  • dino_game/offline.js:恐龙游戏主逻辑(单文件、ES Module 风格);
  • images/default_100_percent/offline/images/default_200_percent/offline/:1x/2x 两套精灵图与错误页图标;
  • sounds/:游戏音轨资源。

README 还指出模板的消费方是上游components/neterror代码(负责读取并渲染模板),以及components/security_interstitials/core/common/resources/下与安全提示页共用的 CSS/JS——这一共享关系在 neterror.html 中可以直接印证:模板通过相对路径引入了interstitial_core.cssinterstitial_common.css(见模板第 10–11 行)。

二、neterror.html:跨平台错误页模板

neterror.html 全文仅 33 行,是 Thorium 错误页的单一入口模板,关键要素如下:

<html dir="$i18n{textdirection}" lang="$i18n{language}"> <head> <meta charset="utf-8"> <meta name="color-scheme" content="light dark"> <meta name="theme-color" content="#fff"> <title>$i18n{title}</title> <link rel="stylesheet" href="../../../components/security_interstitials/.../interstitial_core.css"> <link rel="stylesheet" href="../../../components/security_interstitials/.../interstitial_common.css"> <link rel="stylesheet" href="neterror.css"> </head> <body class="neterror"> <div id="content"></div> <div id="offline-resources"> <img id="offline-resources-1x" src="images/default_100_percent/offline/100-offline-sprite.png"> <img id="offline-resources-2x" src="images/default_200_percent/offline/200-offline-sprite.png"> <template id="audio-resources"> <audio id="offline-sound-press" src="sounds/button-press.mp3"></audio> <audio id="offline-sound-hit" src="sounds/hit.mp3"></audio> <audio id="offline-sound-reached" src="sounds/score-reached.mp3"></audio> <audio id="offline-sound-background" src="sounds/perpetuum_factory_2.mp3"></audio> </template> </div> </body>

可以从中读出三点设计:

  1. i18n 占位符$i18n{...}由上游 neterror 代码在加载模板时替换(方向、语言、标题、字体等),因此同一模板即可覆盖所有语言与平台,这正是 README 所说“同一模板用于所有桌面/移动平台”的落地方式;
  2. 构建条件分支<if expr="optimize_webui">在优化构建中加载minified/neterror.rollup.js,非优化构建加载bundled/neterror.rollup.js(模板第 13–18 行),错误页的 JS 逻辑在构建期被 rollup 打包进%ROOT_GEN_DIR%,模板本身不含内联脚本;
  3. #offline-resources隐藏资源区:恐龙游戏的精灵图与音频以隐藏<img>/<template>形式预置于错误页 DOM 中,游戏脚本按 ID(offline-resources-1x/2xaudio-resources)在运行时取出使用,无需额外网络请求即可离线运行。

三、HiDPI 图像策略与 Thorium 图标替换

images/下按 DPR(device pixel ratio)分目录存放两套同名资源,这是 Chromium 错误页的标准做法——游戏按屏幕密度选取 1x 或 2x 精灵:

资源1x(default_100_percent)2x(default_200_percent)用途
错误页主图100-error-offline.png200-error-offline.png断网页顶部显示的离线状态图标
恐龙精灵图100-offline-sprite.png200-offline-sprite.png恐龙游戏的雪碧图(sprite sheet)
禁用态图标100-disabled.png200-disabled.png彩蛋被禁用时的占位图
页面 Faviconfavicon-16x16.pngfavicon-32x32.png错误页地址栏图标

其中 favicon 一项体现了 Thorium 的定制痕迹:上游 Chromium 的这两个文件位于components/neterror/resources/根目录,而 Thorium 将自有版本移入了按密度划分的offline/子目录。这一点可以从旧版 Windows 构建脚本 trunk.bat 中佐证——脚本在每次 rebase 到上游前显式删除components\neterror\resources\favicon-16x16.pngfavicon-32x32.png,随后执行git rebase-update重新应用 Thorium 的变更,从而保证上游对 favicon 的更新不会覆盖 Thorium 的定制版本。这是一种典型的“文件占位 + 重放变更”的分支维护技巧。

四、音轨定制:perpetuum_factory_2 背景乐

#audio-resources模板中声明了四段音频,但仓库sounds/目录下实际只存放了一个文件:perpetuum_factory_2.mp3(约 1.2 MB,即背景音轨offline-sound-background)。其余button-presshitscore-reached三个音频并不随仓库提供——从 offline.js 对GeneratedSoundFx模块的导入可以推断,这类短促音效由 Web Audio 在运行时程序化合成,<audio>元素只作为资源占位与降级路径。

将一段完整音乐(perpetuum_factory_2)作为离线页面的背景乐,是 Thorium 对上游恐龙游戏的显著增强:上游版本只有合成音效,而 Thorium 的断网页在游玩时会伴随 BGM 播放,这也是该目录“包含 Thorium 恐龙游戏的脚本与图像”之外的第三类定制资源。

五、offline.js:游戏逻辑与街机模式

offline.js 是恐龙游戏的完整实现(约 1700+ 行),文件头版权为 “The Chromium Authors and Alex313031”,表明其在上游代码基础上的二次开发。对理解 Thorium 定制最有信息量的部分集中在文件头部:

  • 单例 Runner 构造器Runner通过Runner.instance_保证全局唯一实例,并支持opt_config注入配置;
  • 双配置体系Runner.normalConfig(初速 6、最高速 13、加速度 0.001)与Runner.slowConfig(初速 4.2、最高速 9、加速度 0.0005)分别对应标准节奏与慢速模式;
  • Thorium 街机模式常量(源码第 124–126 行):
const ARCADE_MODE_URL = 'chrome://dino/'; const ARCADE_MODE2_URL = 'Thorium Dino Game';

从源码结构看,chrome://dino/是 Thorium 提供的独立恐龙游戏页面 URL,配合ARCADE_MODE_INITIAL_TOP_POSITION: 35ARCADE_MODE_TOP_POSITION_PERCENT: 0.1等布局参数(Runner.config第 168–169 行),游戏可以从错误页彩蛋扩展为独立“街机”入口;altGameMode相关字段(altGameImageSpriteinitAltGameType等)则支持加载替代精灵定义的“二周目”游戏形态。此外还有 10 秒左右触发一次的画面反色彩蛋(INVERT_FADE_DURATION: 12000)与游戏手柄支持(pollingGamepads)。

若希望关闭错误页上的恐龙彩蛋,Thorium 完整继承了上游开关:CMDLINE_FLAGS_LIST.md 中列出的--disable-dinosaur-easter-egg(“Disables the dinosaur easter egg on the offline interstitial”)。禁用后错误页会展示*-disabled.png占位图,这与第三节图像清单中的“禁用态图标”一一对应。

六、维护视角:rebase 流程中如何保护这些定制资源

Thorium 作为 Chromium fork,components/neterror下的资源每次上游同步都可能被覆盖。仓库给出的实践证据是:

  1. trunk.bat:在git checkout -f origin/main之前,先rm掉 Thorium 私有命名的资源文件(neterror favicon、thorium_shell.icothorium_flag_entries.h等),再执行git rebase-update将 Thorium 提交重放回来,确保私有文件以 Thorium 内容为准;
  2. THORIUM_DEV_BOOKMARKS.html 中收藏了上游components/neterror的源码浏览入口,供开发者对照上游模板与渲染逻辑;
  3. infra/CMDLINE_FLAGS_LIST.md与 docs/CMDLINE_FLAGS_LIST.md 双份维护命令行开关清单,错误页相关开关(如恐龙彩蛋)也收录其中。

小结

src/components/neterror是 Thorium 错误页体验的全部定制入口:一个 33 行的 neterror.html 模板统一了所有平台的渲染路径,images/下 1x/2x 双密度资源实现了图标级定制,sounds/中的背景乐与 offline.js 的chrome://dino/街机模式共同构成了 Thorium 标志性的离线体验。对维护者而言,关键在于理解“上游覆盖 + rebase 重放”的文件保护机制,才能在持续 rebase 到 Chromium 主干的同时保留这些定制资源。

【免费下载链接】thoriumChromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of the README.md.项目地址: https://gitcode.com/GitHub_Trending/th/thorium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 20:22:12

MacBook外接2K显示器模糊字小?BetterDisplay开启HiDPI完整教程

如果你把 MacBook 接到一台 2K 分辨率的显示器上&#xff0c;大概率会遇到两个让人抓狂的问题&#xff1a;字太小看不清&#xff0c;调大又发虚。这两个问题我断断续续折腾了一年多&#xff0c;试过各种工具和设置&#xff0c;最后终于把它调成了接近 Retina 的观感。这篇就把我…

作者头像 李华
网站建设 2026/9/16 20:21:57

FPGA驱动超声波与IIC激光测距:状态机设计与Verilog实现

简介&#xff1a;这套驱动工程面向FPGA开发者&#xff0c;整合了激光测距模块与HC-SR04超声波测距模块的驱动逻辑&#xff0c;支持通过按键切换传感器&#xff0c;并将测距结果显示在数码管上&#xff0c;适合学习外设接口时序、数据解码与模块化设计。工程基于正点原子开发板搭…

作者头像 李华
网站建设 2026/9/16 20:21:35

STM32裸机物联网终端设计:从状态机到低功耗实战

简介&#xff1a;本资源是一套完整的基于STM32的共享充电宝高分毕业设计实现方案&#xff0c;面向计算机、通信、自动化及人工智能等相关专业的本科生与初阶嵌入式学习者&#xff0c;解决从硬件驱动开发、通信协议对接到系统功能集成的典型工程实践问题&#xff0c;适用于课程设…

作者头像 李华
网站建设 2026/9/16 20:21:19

AI产品安全责任与验证机制:工程护栏实践指南

最近这段时间&#xff0c;AI产品安全责任的话题在圈子里讨论得特别多。监管风向已经非常明确&#xff1a;AI企业必须为那些“危险、未经充分验证”的产品承担后果。虽然具体细则还在博弈中&#xff0c;但这个信号已经足够让所有做AI应用开发、AI大模型落地的团队&#xff0c;重…

作者头像 李华
网站建设 2026/9/16 20:17:22

统信UOS系统盘满了?图形化无损扩容实战指南

要我说&#xff0c;“系统盘满了”这件事&#xff0c;在统信UOS上发生的频率&#xff0c;远比很多人想象中高。尤其是那些从Windows迁移过来的老用户&#xff0c;习惯了C盘动不动就飙红&#xff0c;到了Linux生态里&#xff0c;以为换个文件系统就一劳永逸了。实际上&#xff0…

作者头像 李华