Skip to content

Releases: Zenith-Angle/PageLinkMode

PageLinkMode v0.6.2

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 20 Aug 09:29

PageLinkMode v0.6.2 重点改进了 Discourse 论坛(如 linux.do)中的导航识别与执行一致性,并将论坛导航纳入可配置的基础分类、预设和用户规则体系。

重点修复

主题标题与整行点击行为一致

  • 修复 Discourse 主题列表中“点击标题打开新标签,但点击同一行空白区域仍在当前标签跳转”的问题。
  • 点击主题行空白区域时,现在会复用该行标题链接的目标和分类规则。
  • 行内按钮、输入控件、标签和其他操作入口仍交给网页原生逻辑处理,不会被错误当成主题标题。

新增论坛导航分类

基础分类由 27 类扩展至 29 类:

新分类 识别内容 适中预设 深入预设 最广预设
论坛类别与标签筛选 主题列表中的类别、标签和局部筛选入口 同标签页 同标签页 同标签页
论坛帖子时间轴/定位 首帖、末帖、帖子日期和时间轴定位入口 保持原生 同标签页 新标签页

这两类导航可继续通过全局基础分类、站点分类覆写和个性化规则单独调整,不需要为 linux.do 写死整站行为。

兼容性与准确度

  • 将 Discourse 选择器限制在明确的论坛上下文内,避免普通博客中的 post-date、discourse-tag 等同名样式被误判。
  • 主题标题继续归入“列表与卡片详情”,保持原有新标签策略。
  • 引用回跳等帖子动作控件继续保持原生,避免破坏网页交互。
  • 新增分类已接入配置保存、备份导入、旧配置迁移、调试记录和规则模拟。

升级方式

  1. 下载下方的 dist.zip 并解压。
  2. 在 Chrome 扩展管理页打开开发者模式。
  3. 使用解压后的 dist 目录更新扩展,或对现有未打包扩展点击“重新加载”。
  4. 刷新已经打开的网页,使新的内容脚本生效。

已有 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

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 25 Apr 09:09

更新内容

本次版本主要修复部分站点在“新标签页打开”模式下,点击链接时同时出现“新标签已打开,但原标签页也继续跳转”的问题。

修复

  • 修复 B 站等页面中,扩展已接管链接点击后,原页面脚本仍继续触发导航导致的双跳转问题
  • 当扩展明确接管锚点点击时,同时阻止浏览器默认跳转和页面后续 click 脚本导航
  • 避免同一次点击在 capture / bubble 阶段被重复处理

工程改进

  • 新增锚点接管相关单元测试
  • 补充接管逻辑的说明文档
  • 版本升级至 0.4.1

已验证

  • npm run typecheck
  • npm test
  • npm run build

PageLinkMode v0.4.0

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 22 Apr 07:54

版本简介

v0.4.0 是 PageLinkMode 自 v0.3.3 之后的一次次级版本升级。这一版不再只提供“全局 / 站点 / 页面”三层粗粒度模式,而是把插件内部已有的跳转判断能力显式产品化,升级为一套可查看、可覆写、可调试的“分类化跳转策略系统”。

这次发布的核心目标,是让用户能够真正精确控制网页内导航:哪些跳转应当留在当前标签页,哪些应该在新标签页打开,哪些又应该完全保留网页自己的原生行为。

核心改动

1. 新增分类化跳转策略层

  • 将网页内导航拆分为 12 类可识别、可配置的跳转类型,而不是继续把所有行为压缩成单一模式。
  • 当前版本支持的分类包括:
    • 同站内容链接
    • 跨站内容链接
    • 站点壳层 / 首页导航
    • 传统分页
    • 图片预览 / 原图查看
    • 认证相关链接
    • GET 表单提交
    • 非 GET 表单提交
    • 普通 window.open(...)
    • 认证相关 window.open(...)
    • 图片相关 window.open(...)
    • 命名窗口 / 弹窗式 window.open(...)
  • 每一类都可以独立配置为:同标签页、新标签页、保持原生。
  • 默认策略仍保留此前产品边界:普通内容链接偏向新标签页,分页和图片查看保持原生,站点壳层导航与认证流程偏向当前页。

2. 明确新的规则优先级

  • 在保留现有页面级和站点级整体规则的前提下,引入“站点分类覆写”和“全局分类策略”两层。
  • 最终优先级固定为:
    1. 页面整体规则
    2. 站点整体规则
    3. 站点分类覆写
    4. 全局分类策略
  • 这样既保留了原来的一键强制模式,也允许用户只对特定类型的跳转做精细化调节。

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 状态下的配色冲突,避免出现“深色背景 + 深色文字”的可读性问题。
  • 站点卡片展开、次级按钮与状态提示也统一了动效节奏,让设置页的操作反馈更稳定,不再生硬跳变。

代码与工程更新

  • 扩展状态结构新增:
    • schemaVersion
    • globalCategoryRules
    • siteCategoryRules
  • 运行时消息新增:
    • 分类规则读写
    • 调试记录获取 / 清空 / 追加
  • 新增自动化测试:
    • 导航分类与默认动作测试
    • 规则优先级测试
    • 旧配置导入兼容测试
  • 新增独立测试脚本,避免测试阶段引入额外运行时依赖。

验证结果

  • npm test
  • npm run typecheck
  • npm run build
  • 重新生成并上传 dist.zip
  • 确认发布版本号提升为 v0.4.0

升级说明

  • 已安装旧版本的用户,下载本 release 附带的 dist.zip,解压后在 Chrome 扩展页重新加载即可。
  • 旧配置会自动兼容新结构,无需手动迁移。
  • 如果你此前只使用整体模式,这一版不会强迫你改用分类策略;但当你需要更细致地区分“分页 / 内容链接 / 图片查看 / 表单 / window.open”时,现在可以直接在设置页中完成。

PageLinkMode v0.3.3

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 21 Apr 17:22

版本简介

v0.3.3 是一次补丁级正式发布,但它承接的是自 v0.3.0 之后累计完成、尚未单独对外发版的几轮关键修复。本次 release 重点解决两类实际使用中的失效问题:

  1. 扩展被关闭后重新启用,已经打开的页面不会自动恢复接管。
  2. SPA 站点会在 bubbling 阶段提前接管链接点击,导致扩展对普通内容链接失效。

因此,这个版本既是 v0.3.0 之后的稳定修复汇总版,也是当前推荐安装版本。

自 v0.3.0 以来的改动

0.3.1:保留页面已接管的交互语义

  • 吸收了 PR #1 中真正有价值的部分,修复页面自身已经处理导航时,扩展仍可能误拦截的问题。
  • 将 click / submit 的拦截链路放到 window bubbling 阶段处理。
  • 当事件已经 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 typecheck
  • npm run build
  • 重新生成并上传 dist.zip
  • 确认压缩包内 dist/manifest.json 版本为 0.3.3

升级说明

  • 已安装 v0.3.0 的用户,重新下载本 release 附带的 dist.zip,解压后在 Chrome 扩展页重新加载即可。
  • 本次更新不会清空原有的全局规则、站点规则、页面规则和站点停用状态。
  • 对于 linux.do 这类 SPA 站点,本次修复的是“普通内容链接”接管链路;像图片预览、传统分页等本就被设计为保留网页原生行为的场景,仍然保持原策略。

PageLinkMode v0.3.0

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 20 Apr 12:48

版本简介

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 typecheck
  • npm run build
  • 已重新打包 dist.zip,并确认其中 dist/manifest.json 版本为 0.3.0

升级说明

  • 已安装旧版本的用户,重新加载扩展目录,或直接下载本 release 附带的 dist.zip 解压后加载即可。
  • 停用范围仍按精确 hostname 生效,不会自动扩展到父域或其他子域。
  • 现有站点规则和页面规则会被保留;只有主动关闭某个站点时,扩展才会对该站点回退为浏览器原生行为。

v0.2.3

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 20 Apr 08:06

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 typecheck
  • npm run build