Skip to content

PageLinkMode v0.3.3

Choose a tag to compare

@Zenith-Angle Zenith-Angle released this 21 Apr 17:22
· 7 commits to main since this release

版本简介

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 站点,本次修复的是“普通内容链接”接管链路;像图片预览、传统分页等本就被设计为保留网页原生行为的场景,仍然保持原策略。