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