Skip to content

Conversation

@caffetsong
Copy link

你好,前些天我提交了 issue 来请求适配“开源阅读”Web服务
现在我拥有空闲时间,自己进行了适配,现在将完整的实现提交给您审查。
对于原有代码,主要修改了// main 部分,您可能需要审查

以下是commit:
由于该Web服务是基于Vue.js构建的单页面应用(SPA),其导航和内容更新机制与传统网站不同。本次适配通过使用两次监控解决问题 主要变更与实现细节:

  1. 脚本激活控制:

    • 采用宽泛的 @match http://*/vue/index.html* 规则,以兼容所有用户的本地网络环境(各类IP及端口),同时后续通过检查url来规避非开源阅读web的网站从而触发伪装。
    • 重构了主流程 (// main),通过URL路径 (/vue/index.html) 精准识别应用,将开源阅读的适配逻辑与其它网站完全隔离,避免了潜在冲突。
  2. 全场景SPA导航适配 (核心):

    • 处理“进入”: 当用户从书架等非小说页面首次导航到小说页时,脚本通过 setInterval 轮询检测URL变化,并触发 location.reload() 强制刷新,以确保伪装被正确应用。
    • 处理“前进/翻页”: 在小说页面内部,启动一个 MutationObserver (DOM) 来监控内容变化。这专门处理了URL不变而内容更新的场景(如键盘翻页),并通过刷新页面来加载新章节。
    • 处理“后退/退出”: 并行启动一个 setInterval (URL侦测) 来监控 window.location.hash。一旦URL中不再包含 #chapter,即视为用户已返回书架,脚本同样会刷新页面以彻底清除伪装界面。

为开源阅读(Legado)安卓APP的Web服务功能提供全面的小说页面伪装支持。

由于该Web服务是基于Vue.js构建的单页面应用(SPA),其导航和内容更新机制与传统网站不同。本次适配通过使用两次监控解决问题
主要变更与实现细节:

1.  **脚本激活控制:**
    *   采用宽泛的 `@match http://*/vue/index.html*` 规则,以兼容所有用户的本地网络环境(各类IP及端口),同时后续通过检查url来规避非开源阅读web的网站触发伪装。
    *   重构了主流程 (`// main`),通过URL路径 (`/vue/index.html`) 精准识别应用,将开源阅读的适配逻辑与其它网站完全隔离,避免了潜在冲突。

2.  **全场景SPA导航适配 (核心):**
    *   **处理“进入”**: 当用户从书架等非小说页面首次导航到小说页时,脚本通过 `setInterval` 轮询检测URL变化,并触发 `location.reload()` 强制刷新,以确保伪装被正确应用。
    *   **处理“前进/翻页”**: 在小说页面内部,启动一个 `MutationObserver` (DOM) 来监控内容变化。这专门处理了URL不变而内容更新的场景(如键盘翻页),并通过刷新页面来加载新章节。
    *   **处理“后退/退出”**: 并行启动一个 `setInterval` (URL侦测) 来监控 `window.location.hash`。一旦URL中不再包含 `#chapter`,即视为用户已返回书架,脚本同样会刷新页面以彻底清除伪装界面。
@NiaoBlush
Copy link
Owner

你好 最近比较忙 暂时无法测试

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants