Wayback Machine 浏览器扩展 Safari 版全解析:核心功能、版本演进与源码实现
前端浏览器控制【免费下载链接】wayback-machine-webextensionA web browser extension for Chrome, Firefox, Edge, and Safari 14.项目地址https://gitcode.com/gh_mirrors/wa/wayback-machine-webextension点击查看免费下载导读本文以 appstores/safari/changelog-safari.md 为主体骨架系统梳理 Internet Archive 官方 Wayback Machine 浏览器扩展在 Safari 平台上的功能定位与版本迭代脉络从 2019 年的 1.2.2 一路演进到当前 3.4.x并结合作品仓库中的 webextension/scripts/background.js、webextension/scripts/utils.js 以及 safari/ 目录下的 Xcode 工程源码逐项解析快照计数徽章、右键菜单、404 恢复、Save Page Now 等核心能力的底层实现。读完本文你将完整掌握该扩展在 Safari 上的功能全貌、各版本升级要点以及这些功能在 Web Extension 架构中是如何落地的。一、Safari 版扩展的定位与功能全景1.1 官方扩展的定位changelog-safari.md 开篇即点明定位The Internet Archive presents The Official Wayback Machine Extension即由互联网档案馆Internet Archive官方出品的 Wayback Machine 浏览器扩展。借助 Wayback Machine 的时间回溯能力用户可以回到过去查看一个网站在整个 Web 历史中如何发生变化与演进。该扩展覆盖 Chrome、Firefox、Edge 与 Safari 14 四个平台见 README.md 的安装说明本仓库中的 safari/Wayback Machine.xcodeproj 即面向 macOS Safari 的工程。1.2 核心功能清单原文档 Description根据原文档Safari 版扩展具备以下功能功能说明查看历史版本查看一个网站的最老Oldest或最新Newest版本或查看包含每一次历史存档的日历Calendar视图Site Map站点地图以饼图形式绘制一个网站过去所有页面被存档的历史分布工具栏快照计数工具栏按钮直接显示当前网站被 Wayback Machine 存档的快照数量弹出窗口popup中显示最新快照的日期右键菜单右键点击页面或链接通过 Open in Wayback Machine 菜单直接打开存档版本404 自动恢复访问到死链404 Not Found页面时扩展自动给出 Wayback Machine 中保存版本的链接免登录使用大多数功能无需账户即可使用登录账户后只需单击一次按钮即可存档任意网站第三方辅助功能搜索 Related Tweets相关推文、Alexa、Whois域名查询以及在社交媒体上分享链接技术支持通过 infoarchive.org 提供支持这份功能清单在描述层面对应 appstores/description.md 的 Full Description (Safari only) 小节在实现层面绝大多数能力由 webextension/ 下的共享 Web Extension 代码承担Safari 工程仅负责壳层桥接详见本文第四节。二、版本历史逐版解读1.2.2 → 1.4 的关键里程碑changelog-safari.md 保留了 Safari 版早期1.x 时代的完整版本历史这是理解该扩展演进逻辑的第一手材料。2.1 1.42020 年 3 月 17 日徽章计数与右键菜单该版本新增两个功能工具栏徽章badge在工具栏按钮上显示当前访问网站被存储的快照数量并在弹出窗口中显示最近一次快照的日期。原文档特别注明在隐私浏览Private Browsing模式下不会激活该功能以尊重用户隐私。右键菜单 Open in Wayback Machine将鼠标悬停在链接上并右键即可直接打开该链接在 Wayback Machine 中的存档。这两个功能的现代实现都能在源码中找到对应物快照计数徽章由 utils.js 的 getWaybackCount() 与 background.js 的 updateWaybackCountBadge() 配合实现。前者请求hostURL __wb/sparkline?collectionweboutputjsonurl接口把返回的years对象展开求和得到快照总数并附带回first_ts最早快照时间与last_ts最新快照时间后者在wm_count_setting开启、URL 合法且未处于保存状态时调用badgeCountText()将数字格式化为徽章文本见 utils.js#L302-L314小于 1000 直接显示10009999 显示一位小数加 K 后缀小于 100 万显示整数 K大于等于 100 万显示 M并将徽章底色设为#9A3B38的红色。右键菜单的现代形态由 utils.js 的 setupContextMenus() 创建点击处理逻辑在 background.js 的 contextMenus.onClicked 中firstOldest Version打开https://web.archive.org/web/0/、recentNewest Version打开https://web.archive.org/web/2/、allAll Versions打开https://web.archive.org/web/*/saveSave Page Now则以capture_all: 1参数触发存档。可见 1.4 时代的单条 Open in Wayback Machine 菜单在后来的 3.x 重做中被细化为 Oldest / Newest / All / Save 四个更精确的菜单项。2.2 1.3.12020 年 2 月 28 日与 1.32020 年 2 月 18 日UI 改版与免登录这两个版本的核心变化一致全面改版 UIoverhauled the UI修复若干 bug大多数功能无需登录即可使用most features work without requiring a log in对深色模式Dark Mode做了适配Also looks nice now under Dark Mode。免登录使用这一方向在后续版本中持续深化3.1 版本实现 Save Page Now 无需登录即可存档仅有部分功能保留登录要求以图标代替复选框标识见 appstores/changelog.md。在源码层面登录态检测由 utils.js 的 checkAuthentication() 完成——通过chrome.cookies.getAll({ url: https://archive.org })检查logged-in-sig/ia-authcookie并在 cookie 缺失时尝试从本地存储恢复savePageNowChecked()background.js#L42-L46会先做登录检查再把结果传给savePageNow()未登录时发送的Accept请求头会切换为text/html形式以兼容匿名存档接口background.js#L70-L72。2.3 1.2.22019 年 8 月 18 日空白条目该版本在 changelog 中记录为 (blank)没有留下具体变更说明从版本号间隔1.2.2 之后是 1.3可以推断这是一次维护性发布。原文档如实保留了该条目本文亦不做臆测性补充。三、从 1.x 到 3.x现代版本的演进脉络changelog-safari.md 截止于 1.42020 年 3 月而仓库中的 appstores/changelog.md 记录了全平台All Browsers后续的演进其中明确标注了 Safari 专属条目。将两份文档拼接起来可以得到 Safari 版完整的演进时间线版本时间Safari 相关要点1.2.22019-08-18维护性发布变更说明为空1.3 / 1.3.12020-02UI 改版、bug 修复、免登录、深色模式1.42020-03-17工具栏快照计数徽章、右键菜单3.0—完全重做Save Page Now、Auto Save、404 增强、Site Map、Word Cloud 等3.1—Save Page Now 免登录、Contextual Notices、URLs Collections 按钮3.2 (Safari)—清理 cookie 后保持登录、避免对刚保存页面重复自动存档、正确处理被屏蔽网站等3.3 (Safari)—新版 context API 集成、False 404 Popup bug 修复、更新过时依赖3.4.2—内部代码迁移至 Manifest v3修复 Exclude URLs 保存 bug从工程文件看当前 Safari 工程版本为3.4.3safari/Wayback Machine.xcodeproj/project.pbxproj 中MARKETING_VERSION 3.4.3、CURRENT_PROJECT_VERSION 23而共享扩展的 webextension/manifest.json 声明manifest_version: 3、version: 3.4.8。也就是说今天的 Safari 版已经是完全重写后的 3.x 架构1.x 时期的版本历史属于该产品在旧 Safari App Extension 体系下的早期形态。四、Safari 平台的工程实现细节4.1 壳层应用与扩展的双 Target 结构仓库的 safari/ 目录包含两个 TargetWayback Machine壳层 App提供安装引导窗口。其 ViewController.swift 通过SFSafariExtensionManager.getStateOfSafariExtension(withIdentifier:)查询扩展启用状态在状态标签上显示 Extension is On / Extension is Off并提供按钮调用SFSafariApplication.showPreferencesForExtension(withIdentifier:)直接打开 Safari 的扩展偏好设置AppDelegate.swift 在 Help 菜单中提供打开支持网站的动作。Wayback Machine Extension扩展本体核心类为 SafariWebExtensionHandler.swift实现NSExtensionRequestHandling协议在beginRequest(with:)中接收来自browser.runtime.sendNativeMessage的消息并回包是 Web Extension 与原生壳层之间的消息桥。扩展的 Info.plistsafari/Wayback Machine Extension/Info.plist中NSExtensionPointIdentifier被设为com.apple.Safari.web-extensionNSExtensionPrincipalClass指向SafariWebExtensionHandler——这正是 Safari 14 识别 Web Extension 扩展点的标准声明方式。此外 safari/Wayback Machine/Wayback_Machine.entitlements 开启了 App Sandbox 与files.user-selected.read-only文件访问权限。4.2 共享 Web Extension 代码如何工作Safari 版与 Chrome/Firefox/Edge 版共享 webextension/ 下的全部功能代码。几个关键能力的实现路径如下404 自动恢复chrome.webRequest.onCompleted监听主框架加载凡statusCode 400的响应都会把状态与 URL 写入 tab 数据background.js#L460-L479随后checkNotFound()在not_found_setting开启时调用wmAvailabilityCheck()utils.js#L363-L379请求wayback/available接口查询存档是否存在存在则把工具栏图标切换为 V 状态并视embed_popup_setting决定是否向页面注入 scripts/archive.js 显示横幅background.js#L484-L527。Save Page NowsavePageNow()background.js#L56-L131POST 到hostURL save/拿到job_id后再经savePageStatus()轮询save/status/{jobId}接口依据Retry-After响应头决定重试间隔background.js#L150-L190成功后更新徽章计数并发送 check 状态图标。相关资源检索针对 Wikipedia 的书籍/论文、Amazon 图书、TV News 片段等通过带内存缓存与 10 秒超时的fetchCachedAPI()background.js#L302-L364调用services/context/*系列接口命中后工具栏显示 R 状态。URL 排除规则为保护隐私utils.js 的 excluded_urls 明确排除了localhost、内网地址、chrome:/about:/moz-extension:等内部协议这与原文档 1.4 中隐私浏览下不激活徽章的隐私取向一脉相承。注意不同浏览器会使用不同的 API 域名前缀如 Safari 使用https://safari-api.archive.org/见 utils.js#L77-L86因此从源码结构看Safari 版的 API 流量是与其他浏览器隔离的。4.3 从源码构建与提交 App Store仓库内 appstores/safari/README.md 记录了维护者的提交备忘录可作为实操参考Bundle IDarchive.org.waybackmachine.mac与archive.org.waybackmachine.mac.extension两个 Target 需保持一致签名配置在 Signing Capabilities 中勾选 Automatically manage signingTeam 为 Internet Archive签名证书为 DevelopmentApp Sandbox 不勾选额外项File Access 保持默认 none构建上传先在 App Store Connect 添加新版本然后通过 Xcode 菜单Product Archive在 Organizer 中点击 Distribute App导出合规在 App Store Connect 选择构建版本时Export Compliance Information 需声明 Uses Encryption YES、Qualify for Exemption YES并确认None of the algorithms mentioned above。普通用户无需源码构建直接在 Safari 中安装 App Store 版本即可开发者在 macOS Safari 14 上调试本地构建时需要先在系统设置中开启 Allow Unsigned Extensions再用 Xcode 打开 safari/Wayback Machine.xcodeproj 运行详见 README.md。五、结语通过 changelog-safari.md 这扇历史窗口可以看到 Safari 版 Wayback Machine 扩展清晰的产品演进脉络从 2019 年 1.2.2 的起步到 1.3/1.3.1 确立免登录 深色模式的使用体验再到 1.4 引入快照计数徽章与右键菜单最终在 3.x 时代完成架构级重写并随 Manifest v3 迁移至现代 Web Extension 体系。这份演进史并非孤立的发布记录——工具栏徽章的计数逻辑、右键菜单的 URL 构造、404 恢复的监听链路至今仍可在 background.js 与 utils.js 中找到一一对应的实现。对于希望理解浏览器扩展如何与 Wayback Machine API 协同工作的开发者而言这份 changelog 加上仓库源码就是一份可以直接阅读的实战教材。赞分享前端浏览器控制【免费下载链接】wayback-machine-webextensionA web browser extension for Chrome, Firefox, Edge, and Safari 14.项目地址https://gitcode.com/gh_mirrors/wa/wayback-machine-webextension点击查看免费下载相关推荐Wayback Machine 浏览器扩展全解析从核心功能、源码架构到安装与开发实战Wayback Machine 浏览器扩展全解析从核心功能、源码架构到安装与开发实战 互联网档案馆Internet Archive与 Google Sum前端浏览器控制Wayback Machine 浏览器扩展版本演进全解析从 3.0 全新设计到 Manifest V3 迁移Wayback Machine 浏览器扩展版本演进全解析从 3.0 全新设计到 Manifest V3 迁移 本文以 appstores/changelog.前端浏览器控制免费二维码生成 6 款工具从个人项目到批量业务一篇选完免费二维码生成 6 款工具从个人项目到批量业务一篇选完 项目里要放二维码这篇按场景梳理了免费二维码生成的 6 款工具在线 API、前端组件、本地库都覆盖文档知识库上一篇gRPC C 代码生成中的 append_async_suffixAsync 后缀命名规则详解与源码级验证下一篇基于 Docker 与 Fly.io 部署 lnav 在线交互式演示环境demo 目录构建与部署全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpCore-Simplify 完整指南:如何从一份硬件报告生成 OpenCore EFI

OpCore-Simplify 完整指南:如何从一份硬件报告生成 OpenCore EFI

OpCore-Simplify 完整指南:如何从一份硬件报告生成 OpenCore EFI 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify 是面向黑…

2026/10/17 4:06:46 阅读更多 →
RedisInsight 快速上手:3 步装好、5 分钟连库,图形化搞定 Redis 日常管理

RedisInsight 快速上手:3 步装好、5 分钟连库,图形化搞定 Redis 日常管理

RedisInsight 快速上手:3 步装好、5 分钟连库,图形化搞定 Redis 日常管理 【免费下载链接】RedisInsight Redis GUI by Redis 项目地址: https://gitcode.com/GitHub_Trending/re/RedisInsight 还在终端里一条一条敲 redis-cli 命令?R…

2026/10/17 4:06:46 阅读更多 →
免费离线看日漫?屏译「离线日语漫画」预设一键配置教程,竖排文字也能实时翻简中

免费离线看日漫?屏译「离线日语漫画」预设一键配置教程,竖排文字也能实时翻简中

【免费下载链接】overlay-translator 无需 ROOT 的开源 Android 屏幕实时翻译工具,适合游戏、视觉小说和漫画。支持端侧与云端 OCR、离线 LLM、多种翻译服务和文字朗读(TTS),译文可直接显示在画面上。Open-source no-root Android…

2026/10/16 1:46:42 阅读更多 →

最新新闻

国内如何使用OpenClaw?把settings改到TaoToken的完整配置流程

国内如何使用OpenClaw?把settings改到TaoToken的完整配置流程

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

2026/10/17 7:52:14 阅读更多 →
Python自动化实战:赛尔号登录器与强化学习工具包拆解

Python自动化实战:赛尔号登录器与强化学习工具包拆解

简介:这份资源围绕赛尔号游戏与Python编程的结合展开,面向对游戏辅助开发、网络通信与强化学习感兴趣的Python学习者及游戏AI爱好者。包内共2000个文件,以1258个txt文本、607个bmp图像为主,另含24个py脚本、26个dll动态库、17个ex…

2026/10/17 7:52:14 阅读更多 →
基于Matlab的多水下航行器分布式NMPC轨迹跟踪控制复现详解

基于Matlab的多水下航行器分布式NMPC轨迹跟踪控制复现详解

在水下机器人这个圈子里,轨迹跟踪控制一直被看作“规划”和“执行”之间的关键承接环节。最近一两年,我一直在做多水下航行器协同编队相关的控制仿真与半物理验证,绕不开的一个高频关键词就是NMPC——非线性模型预测控制。这篇内容想完整梳理…

2026/10/17 7:52:14 阅读更多 →
带日期标记的学习记录:从目标拆解到复盘归档的完整方法

带日期标记的学习记录:从目标拆解到复盘归档的完整方法

看到“0310学习记录”这个标题,我第一反应是亲切——这大概率又是一篇带着日期索引的个人学习复盘,属于那种只有自己看得懂、但写好了能反复翻出来救命的碎片化存档。我自己过去两年写了不少类似格式的记录,从最早流水账一样的“看了几页书、…

2026/10/17 7:52:14 阅读更多 →
136-KC705E增强版FPGA数据采集IO卡:基于Kintex-7与PCIe x8的硬件设计

136-KC705E增强版FPGA数据采集IO卡:基于Kintex-7与PCIe x8的硬件设计

做高速数据采集系统的时候,摆在面前的第一道选择题不是选算法,而是选硬件平台。主机侧要插卡、要高速吞吐,还得留出外设扩展空间,找来找去最终落在了这块板上:136-KC705E增强版,一个基于FMC接口、以Kintex-…

2026/10/17 7:52:14 阅读更多 →
城市环境下多智能体协同追踪仿真:建模、算法与Matlab实现

城市环境下多智能体协同追踪仿真:建模、算法与Matlab实现

我不止一次见过这样的场景:有人在城市环境下做多智能体追踪仿真,跑了十几个回合,追踪者不是撞墙就是跟丢目标,最后一群人围在一起对着满屏的红叉发愁。“多智能体在城市环境中的追踪”这个题目看起来像经典的“警察抓小偷”&#…

2026/10/17 7:51:14 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/16 14:23:36 阅读更多 →