Wayback Machine 浏览器扩展 Safari 版全解析:核心功能、版本演进与源码实现

发布时间:2026/10/16 1:47:45
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),仅供参考