尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
为什么浏览器“另存为“总是失败?kage“先渲染、再剥离、后本地化“三阶段原理全解
为什么浏览器另存为总是失败kage先渲染、再剥离、后本地化三阶段原理全解【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kage你有没有这样的经历想永久保存一篇文章点了浏览器另存为网页半年后打开却只剩一片空白或永远转圈的加载图标。kage 就是为解决这个问题而生的开源离线存档工具它克隆网站供离线浏览并把所有 JavaScript 剥离干净。本文将拆解 kage 先渲染、再剥离、后本地化的三阶段原理帮你一次看懂它为什么比另存为可靠得多。浏览器另存为到底败在哪问题不在存而在存错了东西。现代网页早就不是静态文档而是一个靠 JavaScript 实时生成的应用另存为通常会在三个地方翻车失败模式表现根本原因空白页打开后只剩骨架保存的是图纸而非成品JS 没跑内容由 JS 生成死链图片图片裂开、样式丢失CSS 和图片仍指向远程服务器服务器一改或一关就失效幽灵请求离线时仍在偷偷联网保存的 HTML 里还带着统计、推送、埋点脚本一句话总结另存为存的是别人的程序而不是你看到的内容。页面从未真正属于你它只是别人 JavaScript 的一个瘦客户端。kage 的三阶段流水线kage 走了另一条路先用真实的浏览器把页面看完再撕掉所有脚本最后把资源搬到本地。整条管线可以概括为一条流水线种子 URL → 无头 Chrome 渲染 → 最终 DOM 快照 → 剥离 JS → 本地化资源 → 落盘下面逐阶段拆解。阶段一先渲染——让无头 Chrome 替你看完页面kage 不是抓取 HTML 源码而是驱动一个真实的无头 Chrome 打开页面就像你亲眼去看它一样。核心逻辑在 browser/pool.go等页面安静下来加载完成后还会等待约 1.5 秒的网络空闲期Settle让 AJAX 数据、字体、图片全部到位再对最终 DOM 拍快照——保存的就是人眼实际看到的那个页面自动滚动加--scroll参数后kage 会模拟滚动整页触发懒加载图片与无限流内容再滚回顶部快照有并发、有兜底默认 4 个页面并行渲染Workers每页有 30 秒渲染超时单页出错不会拖垮整场克隆安全优先Chrome 沙箱默认开启禁止浏览器私自下载文件到磁盘所有下载都走 kage 自己的下载器。这一步解决的是另存为的死穴内容必须先在浏览器里活过一次才能被完整保存。阶段二再剥离——把活页面变成死标本拿到渲染好的最终 DOM 后kage 交给 sanitize/sanitize.go 做外科手术式清理。它用标准 HTML 解析器遍历整棵 DOM 树删掉一切会动、会联网的东西 所有script标签✋ 所有onclick、onload等事件处理器属性 一切javascript:伪协议链接替换为#⏳meta http-equivrefresh自动跳转preconnect、dns-prefetch等离线毫无意义的预连接提示甚至包括藏在 IE 条件注释里、能绕过普通遍历的script。同时它保留样式、图片、字体、表单和全部语义标签——布局原封不动。官方对此有一句绝妙的比喻保存后的页面是一张照片而不是一个程序。没有跟踪、没有网络调用、没有意外就是一堆能直接双击打开的.html文件。阶段三后本地化——让每个链接都指向你的硬盘前两阶段解决内容完整和绝对安全第三阶段解决离线可用。这一步由两个模块协作完成1. 确定性 URL→路径映射urlx/urlx.go每个 URL 都会经过Normalize归一化小写化 scheme/host、去 fragment、去默认端口然后映射到一个确定的本地路径。妙处在于这是一个纯函数不碰网络、不碰磁盘所以页面工人可以在资源还没下载完之前就先把它在 HTML 里的链接改写成本地相对路径——两边提前约定好字节将来放在哪天然支持并行。2. 资源下载与改写asset/页面里的img src、a href被asset.RewriteHTML批量改写CSS 里的url(...)和import则由 asset/css.go 中的RewriteCSS处理指向的字体和图片同样拉回本地。资源走的是独立的普通 HTTP 下载池与浏览器渲染互不阻塞。整个过程的编排代码在 clone/cloner.go先渲染 → 改写链接 → 剥离脚本 → 写入磁盘一气呵成。三阶段跑完磁盘上长什么样镜像目录一目了然paulgraham.com/ ├── index.html # 首页脚本已剥离 ├── greatwork.html # 某篇文章 └── _kage/ # 保留区资源与爬取状态 ├── paulgraham.com/site.css # 本地化样式url() 已改写 ├── paulgraham.com/pg.png └── state.json # 已访问集合支持断点续爬所有资源都躺在_kage/里所有链接都已是相对路径。接下来怎么用完全由你决定kage serve 目录—— 起个本地静态服务器在浏览器里预览kage pack 镜像目录—— 压缩成单个.zim归档或打包成一个自带网站的可执行文件发给别人什么都不用装用 webview 标签构建后打开就是一个原生窗口里的离线站点像真正的桌面应用。与另存为的对比思维方式变了浏览器另存为kage保存对象未渲染的 HTML 源码 部分附件渲染后的最终 DOM 快照JavaScript原样保留离线仍可能联网全部剥离页面是照片不是程序资源链接指向远程服务器全部改写为本地相对路径SPA / 懒加载页面空白或残缺完整呈现可自动滚动触发加载断点续传无Ctrl-C 保存进度下次接着跑结语回到开头的问题浏览器另存为失败是因为它试图保存一个永远在别人的服务器上运行的页面。而 kage 的三阶段原理给出了另一种答案——先渲染让你看到的成为你拥有的✂️再剥离让拥有变为安全后本地化让安全变为可随身携带。这三步走完后落盘的就不是一份网页副本而是一份可以离线阅读十年、丢给任何设备都能打开的网站快照。想深入了解配置细节可以查阅项目自带的文档 docs/ 与快速上手指南 docs/content/getting-started/quick-start.md。【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

cc-skills-golang 测试与性能度量:表格驱动测试、pprof剖析与benchstat对比完全指南

cc-skills-golang 测试与性能度量:表格驱动测试、pprof剖析与benchstat对比完全指南

cc-skills-golang 测试与性能度量:表格驱动测试、pprof剖析与benchstat对比完全指南 【免费下载链接】cc-skills-golang 🧑‍🎨 A collection of Golang agentic skills that works 项目地址: https://gitcode.com/gh_mirrors/cc/cc-skills…

📅 2026/9/27 3:04:13
嘉立创EDA专业版设计规则实战:电源、差分对与星型接地

嘉立创EDA专业版设计规则实战:电源、差分对与星型接地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 3:04:13
工业控制器分级存储方案:EEPROM、NOR Flash与SD卡选型及可靠性设计

工业控制器分级存储方案:EEPROM、NOR Flash与SD卡选型及可靠性设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/27 3:04:13
MORE NEWS

更多资讯

📰

10年老兵揭秘:关键词seo排名优化如何不花冤枉钱,源码下载后避坑指南

10年老兵揭秘:关键词seo排名优化如何不花冤枉钱,源码下载后避坑指南 找建站公司最怕什么?不是技术差,而是被高价坑。很多老板为了省事,几万块扔出去,网站建完排名还是零,想改个标题还得求着服务商。这时候你才会意识到,手里没攥着 源码下载…

📰

建站避坑指南:一文搞懂cms的功能有哪些及选型全解

建站避坑指南:一文搞懂cms的功能有哪些及选型全解 找建站公司怕被坑高价,这是很多老板和设计师的噩梦。报价单上写满“智能系统”、“无限扩展”,交钱后才发现只是个套壳模板,改个颜色都要加钱。今天不玩虚的,咱们直接拆底裤, 一文搞懂…

📰

Storm 序列化优化:自定义 Serializer、Kryo 注册与零拷贝

Storm 序列化优化:自定义 Serializer、Kryo 注册与零拷贝1. Storm 序列化瓶颈分析Storm 作为实时计算框架,序列化性能直接影响整个应用的吞吐量和延迟。默认的 Java 序列化机制存在以下问题:反射机制导致性能开销未注册类型导致序列化失败内存…

📰

避坑实战:微信商城怎么开通教程,SSL证书配置全解析

避坑实战:微信商城怎么开通教程,SSL证书配置全解析 备案流程一头雾水,是绝大多数人在搞微信商城时遇到的第一个拦路虎。很多人以为注册个小程序就能卖货,结果卡在服务器域名备案、SSL证书申请、微信后台配置这三个环节,折腾半个月还没上线。我做过…

📰

长清网站建设电话怎么打才不亏?3个关键步骤搞定多少钱

长清网站建设电话怎么打才不亏?3个关键步骤搞定多少钱 别再被“模板网站”坑了。你花大几千买的模板,上线后客户一眼就划走,觉得你这公司不专业,甚至怀疑是皮包公司。这时候你才慌了,打电话问客服怎么改,对方只会说“模板就这样,改不了”。更气人的是…

📰

网站开发使用的语言类选型最佳实践

网站开发使用的语言类选型最佳实践 备案流程一头雾水?别慌,这其实是新手最容易踩的坑,但也是建立技术自信的最佳实践起点。很多刚入行的前端开发者,特别是河南本地的初学者,往往纠结于选什么语言,却忽略了部署和合规的基础。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬