Repository navigation
Releases: Zenith-Angle/PageLinkMode
Release list
PageLinkMode v0.6.2
PageLinkMode v0.6.2 重点改进了 Discourse 论坛(如 linux.do)中的导航识别与执行一致性,并将论坛导航纳入可配置的基础分类、预设和用户规则体系。
重点修复
主题标题与整行点击行为一致
- 修复 Discourse 主题列表中“点击标题打开新标签,但点击同一行空白区域仍在当前标签跳转”的问题。
- 点击主题行空白区域时,现在会复用该行标题链接的目标和分类规则。
- 行内按钮、输入控件、标签和其他操作入口仍交给网页原生逻辑处理,不会被错误当成主题标题。
新增论坛导航分类
基础分类由 27 类扩展至 29 类:
| 新分类 | 识别内容 | 适中预设 | 深入预设 | 最广预设 |
|---|---|---|---|---|
| 论坛类别与标签筛选 | 主题列表中的类别、标签和局部筛选入口 | 同标签页 | 同标签页 | 同标签页 |
| 论坛帖子时间轴/定位 | 首帖、末帖、帖子日期和时间轴定位入口 | 保持原生 | 同标签页 | 新标签页 |
这两类导航可继续通过全局基础分类、站点分类覆写和个性化规则单独调整,不需要为 linux.do 写死整站行为。
兼容性与准确度
- 将 Discourse 选择器限制在明确的论坛上下文内,避免普通博客中的
post-date、discourse-tag等同名样式被误判。 - 主题标题继续归入“列表与卡片详情”,保持原有新标签策略。
- 引用回跳等帖子动作控件继续保持原生,避免破坏网页交互。
- 新增分类已接入配置保存、备份导入、旧配置迁移、调试记录和规则模拟。
升级方式
- 下载下方的
dist.zip并解压。 - 在 Chrome 扩展管理页打开开发者模式。
- 使用解压后的
dist目录更新扩展,或对现有未打包扩展点击“重新加载”。 - 刷新已经打开的网页,使新的内容脚本生效。
已有 schema v4 配置会继续保留;新增分类会按当前预设补齐安全默认值。
验证结果
- TypeScript 类型检查通过。
- 93 个单元测试全部通过。
- 18 条真实 Chromium E2E 全部通过,其中包含 Discourse 整行脚本导航回归场景。
- 生产构建通过,
dist与dist.zip共 20 个文件并逐字节一致。
下载与完整变更
- 推荐安装包:下方 Assets 中的
dist.zip - 完整代码变更:v0.4.1...v0.6.2
PageLinkMode v0.4.1
更新内容
本次版本主要修复部分站点在“新标签页打开”模式下,点击链接时同时出现“新标签已打开,但原标签页也继续跳转”的问题。
修复
- 修复 B 站等页面中,扩展已接管链接点击后,原页面脚本仍继续触发导航导致的双跳转问题
- 当扩展明确接管锚点点击时,同时阻止浏览器默认跳转和页面后续 click 脚本导航
- 避免同一次点击在 capture / bubble 阶段被重复处理
工程改进
- 新增锚点接管相关单元测试
- 补充接管逻辑的说明文档
- 版本升级至 0.4.1
已验证
- npm run typecheck
- npm test
- npm run build
PageLinkMode v0.4.0
版本简介
v0.4.0 是 PageLinkMode 自 v0.3.3 之后的一次次级版本升级。这一版不再只提供“全局 / 站点 / 页面”三层粗粒度模式,而是把插件内部已有的跳转判断能力显式产品化,升级为一套可查看、可覆写、可调试的“分类化跳转策略系统”。
这次发布的核心目标,是让用户能够真正精确控制网页内导航:哪些跳转应当留在当前标签页,哪些应该在新标签页打开,哪些又应该完全保留网页自己的原生行为。
核心改动
1. 新增分类化跳转策略层
- 将网页内导航拆分为 12 类可识别、可配置的跳转类型,而不是继续把所有行为压缩成单一模式。
- 当前版本支持的分类包括:
- 同站内容链接
- 跨站内容链接
- 站点壳层 / 首页导航
- 传统分页
- 图片预览 / 原图查看
- 认证相关链接
- GET 表单提交
- 非 GET 表单提交
- 普通
window.open(...) - 认证相关
window.open(...) - 图片相关
window.open(...) - 命名窗口 / 弹窗式
window.open(...)
- 每一类都可以独立配置为:
同标签页、新标签页、保持原生。 - 默认策略仍保留此前产品边界:普通内容链接偏向新标签页,分页和图片查看保持原生,站点壳层导航与认证流程偏向当前页。
2. 明确新的规则优先级
- 在保留现有页面级和站点级整体规则的前提下,引入“站点分类覆写”和“全局分类策略”两层。
- 最终优先级固定为:
- 页面整体规则
- 站点整体规则
- 站点分类覆写
- 全局分类策略
- 这样既保留了原来的一键强制模式,也允许用户只对特定类型的跳转做精细化调节。
3. 设置页重构为规则工作台
Options页面不再只是平铺规则列表,而是升级为“规则工作台”。- 新版设置页包含三个核心工作区:
- 全局分类策略矩阵
- 站点分类覆写卡片
- 最近命中的调试记录
- 每个站点现在都可以展开查看,并针对各类跳转单独覆写动作为“继承全局 / 同标签页 / 新标签页 / 保持原生”。
- 旧的页面规则没有移除,而是降级为“高级规则”区,只继续负责页面级整体强制模式。
4. 新增调试记录能力
- 后台新增最近 50 条导航决策记录,保存到
chrome.storage.session。 - 每条记录都会展示:
- 时间
- 当前页面 URL
- 目标 URL
- 触发来源(
anchor/form/window.open) - 命中的分类
- 最终动作
- 生效来源(页面整体 / 站点整体 / 站点分类 / 全局分类 / 站点已停用)
- 判断 reason
- 设置页支持按站点筛选和一键清空,便于排查“为什么这次跳转走了当前页 / 新标签 / 原生行为”。
5. 内核与兼容性调整
content script、page bridge、后台消息协议、存储结构、规则解析链路已整体升级到分类策略模型。- 旧配置导入时会自动补齐新的
schemaVersion: 2结构,不会丢失已有全局规则、站点规则、页面规则和站点停用状态。 - 现有的运行时恢复能力和 SPA 站点保护逻辑继续保留:
- 扩展重新启用后,已打开页面仍能恢复接管。
- 对
linux.do这类站点的 capture 阶段普通锚点处理仍然有效。
- 产品边界保持不变:不会扩大到浏览器原生 UI、站点业务自动化或通用
history.pushState接管。
6. 设置页交互细节打磨
- 对规则工作台里的分类按钮组做了交互优化,补上更顺滑的切换过渡、选中态滑动底板与更轻的按压反馈。
- 修复了 hover 状态下的配色冲突,避免出现“深色背景 + 深色文字”的可读性问题。
- 站点卡片展开、次级按钮与状态提示也统一了动效节奏,让设置页的操作反馈更稳定,不再生硬跳变。
代码与工程更新
- 扩展状态结构新增:
schemaVersionglobalCategoryRulessiteCategoryRules
- 运行时消息新增:
- 分类规则读写
- 调试记录获取 / 清空 / 追加
- 新增自动化测试:
- 导航分类与默认动作测试
- 规则优先级测试
- 旧配置导入兼容测试
- 新增独立测试脚本,避免测试阶段引入额外运行时依赖。
验证结果
npm testnpm run typechecknpm run build- 重新生成并上传
dist.zip - 确认发布版本号提升为
v0.4.0
升级说明
- 已安装旧版本的用户,下载本 release 附带的
dist.zip,解压后在 Chrome 扩展页重新加载即可。 - 旧配置会自动兼容新结构,无需手动迁移。
- 如果你此前只使用整体模式,这一版不会强迫你改用分类策略;但当你需要更细致地区分“分页 / 内容链接 / 图片查看 / 表单 / window.open”时,现在可以直接在设置页中完成。
PageLinkMode v0.3.3
版本简介
v0.3.3 是一次补丁级正式发布,但它承接的是自 v0.3.0 之后累计完成、尚未单独对外发版的几轮关键修复。本次 release 重点解决两类实际使用中的失效问题:
- 扩展被关闭后重新启用,已经打开的页面不会自动恢复接管。
- SPA 站点会在 bubbling 阶段提前接管链接点击,导致扩展对普通内容链接失效。
因此,这个版本既是 v0.3.0 之后的稳定修复汇总版,也是当前推荐安装版本。
自 v0.3.0 以来的改动
0.3.1:保留页面已接管的交互语义
- 吸收了 PR #1 中真正有价值的部分,修复页面自身已经处理导航时,扩展仍可能误拦截的问题。
- 将
click/submit的拦截链路放到windowbubbling 阶段处理。 - 当事件已经
defaultPrevented,或事件本身不可取消时,扩展会主动跳过,保留页面原本的交互语义。 - 这一步修复的目标,是避免扩展和站点脚本“抢控制权”,减少对已有页面逻辑的破坏。
0.3.2:修复扩展关闭再启用后的恢复链路
- 新增后台运行时自举逻辑,在扩展恢复运行时主动补齐状态初始化,而不是只等待新标签页加载。
- 后台会扫描已经打开的普通网页标签页,检查当前页是否还能与 content script 通信;如果不能,会自动补注入
content.js。 - 新增标签页激活、页面完成加载时的补偿逻辑,让恢复接管不再依赖用户手动刷新。
- 为 content script 增加幂等保护,避免补注入时重复注册监听器或重复桥接页面脚本。
- 这一轮改动的目标,是把“关闭扩展再启用后看起来像失效”的问题,修到运行时生命周期层面,而不是只在 popup 上提示用户刷新页面。
0.3.3:修复 Discourse / SPA 站点上的普通链接失效
- 定位到一类 SPA 站点会在 bubbling 阶段把普通锚点点击转成站内路由,并提前
preventDefault()。 - 针对这类站点,新增 capture 阶段的普通锚点拦截,让扩展能在页面路由层改写事件之前先做判定。
- 保留 bubbling 阶段的兜底处理与“页面已接管交互”的保护,避免回退到粗暴拦截。
- 将锚点解析与导航处理收敛成共享逻辑,减少 capture / bubble 两条链路之间的分叉。
- 现有的分页识别、图片查看识别、认证链接保守处理等 heuristics 没有被放宽,仍然保持原来的边界和保护策略。
受影响的核心能力
- 扩展重启后的存活页面恢复接管能力。
- SPA 站点上的普通内容链接接管能力。
- 页面自有交互与扩展接管之间的冲突控制。
- 版本号与发布产物同步链路。
验证结果
npm run typechecknpm run build- 重新生成并上传
dist.zip - 确认压缩包内
dist/manifest.json版本为0.3.3
升级说明
- 已安装
v0.3.0的用户,重新下载本 release 附带的dist.zip,解压后在 Chrome 扩展页重新加载即可。 - 本次更新不会清空原有的全局规则、站点规则、页面规则和站点停用状态。
- 对于
linux.do这类 SPA 站点,本次修复的是“普通内容链接”接管链路;像图片预览、传统分页等本就被设计为保留网页原生行为的场景,仍然保持原策略。
PageLinkMode v0.3.0
版本简介
v0.3.0 是一次明确的功能级发布,而不再是补丁级修订。这个版本补上了“按站点彻底停用扩展影响”的能力,同时完善了分页与图片查看等特殊导航场景的保守识别策略,并附带可直接下载使用的构建产物。
主要更新
1. 当前站点生效总开关
- 在 popup 顶部新增“当前站点生效”总开关,默认开启。
- 关闭后,当前站点将回退为浏览器原生导航行为,不再拦截普通链接、表单提交和
window.open(...)。 - 重新开启后,会恢复此前保存的站点规则和页面规则,不会清空既有配置。
- popup 关闭态会明确显示“当前生效:不干预”和“来源:站点已停用”。
- badge 新增关闭态
关,避免站点已停用时仍显示“同/新”的误导状态。 - 站点停用时,站点级和页面级规则区域保留但禁用;全局默认规则仍可以继续编辑。
2. 配置模型与兼容性更新
- 扩展状态新增
disabledSites,按精确hostname保存被停用的站点。 - 新增
siteEnabled解析链路,优先于页面规则、站点规则和全局默认规则。 - 导入旧配置时,如果没有
disabledSites字段,会自动兼容为空数组,不会破坏原有配置文件。
3. 导航例外识别优化
- 新增传统翻页链接识别,例如页码、上一页、下一页、
rel=prev/next等场景。 - 新增图片查看入口识别,例如原图预览、图片预览、Lightbox、Gallery Viewer 等高置信场景。
- 对这些场景默认保留浏览器原始语义,减少误把浏览行为当作内容跳转接管。
4. 文档与版本同步
- README、
package.json、manifest.json已同步升级到v0.3.0。 - 本次 release 已附带压缩构建产物
dist.zip,可直接下载并加载到 Chrome 扩展页中使用。
验证结果
npm run typechecknpm run build- 已重新打包
dist.zip,并确认其中dist/manifest.json版本为0.3.0
升级说明
- 已安装旧版本的用户,重新加载扩展目录,或直接下载本 release 附带的
dist.zip解压后加载即可。 - 停用范围仍按精确
hostname生效,不会自动扩展到父域或其他子域。 - 现有站点规则和页面规则会被保留;只有主动关闭某个站点时,扩展才会对该站点回退为浏览器原生行为。
v0.2.3
PageLinkMode v0.2.3
PageLinkMode 的首个正式 release,聚焦“网页内链接跳转控制”这条主线,提供一套可配置、可记忆、可导入导出的 Chrome MV3 导航规则系统。
本次版本包含
- 显式站点授权流
- 新站点首次配置前需要先授权
- 授权完成后不自动刷新,当前页手动刷新后开始接管
- 已在 Chrome 侧手动放开的站点,也能被 popup 正确识别为已授权
- 三层规则模型
- 支持全局默认、站点级、页面级三层优先级
- 支持在 popup 中直接查看当前页面的实际生效模式和规则来源
- 更清晰的 popup 结构
- 站点级规则、页面级规则、全局默认拆分为独立区域
- 规则管理入口改为更明确的按钮语义
- 设置保存后改为轻提示,不再自动刷新网页
- 配置管理能力
- options 页支持导入 / 导出完整配置
- 导入采用整份替换并带校验,避免脏数据写入
- 新标签打开行为修正
- 被改写为新标签页的导航,现在会插入到当前标签页右侧,而不是浏览器标签栏最右侧
- README 与项目展示优化
- 仓库首页文档改成更适合 GitHub 展示的 README 结构
- 补充项目定位、边界、安装、使用、开发和 roadmap 说明
适用范围
当前版本主要适用于这些网页内导航场景:
- 普通链接点击
target="_blank"链接- 页面脚本中的
window.open(...) - 常见 HTML 表单提交
以下场景仍然不在当前版本目标内:
- 浏览器原生 UI,例如地址栏、标签栏、书签栏
- 右键菜单中的“在新标签页打开链接”
- 通用 SPA 路由接管
- 非 Chrome 生态的系统兼容性整理
Release Assets
PageLinkMode-v0.2.3-dist.zip- 已构建的扩展产物,可直接在 Chrome 开发者模式中以“加载已解压的扩展程序”的方式加载解压后的目录
开发验证
本次 release 前已执行:
npm run typechecknpm run build