观澜浏览器 - Via功能差异开发路线图
版本: 2.0.0 (修正版)
创建时间: 2026-05-22
最后更新: 2026-05-22 (DEX 深度分析后修正)
⚠️ 2026-05-22 修正: 基于 DEX 深度提取分析,发现此前严重低估了 Via 的能力差距。 Via 不仅功能远超预期,且拥有完整 ABP 拦截引擎 + Userscript 生态 + Readability 阅读模式。
🎯 总体目标
通过 DEX 逆向分析发现,Via 比观澜多 8 项核心能力。本路线图按差距大小重新排序,集中力量补强最大短板。
📊 功能差异概览(修正后)
缺失功能按差距排序
| 功能 | 优先级 | 差距倍数 | 用户价值 | 预计工时 |
|---|---|---|---|---|
| 广告拦截重构 | 🔴 P0 | 60x | 极高 | 24小时 |
| Userscript 脚本 | 🔴 P0 | 从0到1 | 极高 | 20小时 |
| 阅读模式 | 🟡 P1 | 从0到1 | 高 | 16小时 |
| JS Bridge 双桥接 | 🟡 P1 | 从0到1 | 高 | 12小时 |
| 用户代理切换 | 🟢 P2 | 80%已完成 | 中 | 8小时 |
| 规则在线更新 | 🟢 P2 | 从0到1 | 中 | 8小时 |
| 代理设置 | ⚪ P3 | — | 低 | 12小时 |
| SSL证书管理 | ⚪ P3 | — | 低 | 12小时 |
🗓️ 开发时间线(修正)
阶段一:广告拦截重构 (P0, ~24h) — 最大差距
1. 导入 Via simple.txt 3143条规则 → 直接内置到项目
2. 实现 ABP 规则解析器 (||domain^, ##elemhide, @@exception, /regex/)
3. 元素隐藏 CSS 注入引擎
4. 在线规则订阅 + 定时更新 (EasyList/Adguard 共25个源)
5. AdBlockStats UI 适配新引擎
预计: 2026-05-29
阶段二:Userscript 生态 (P0, ~20h)
1. Userscript 管理器 (安装/卸载/启用/禁用)
2. 元数据解析 (@name/@match/@include/@run-at)
3. JS 注入引擎 (evaluateJavaScript on page load)
4. Userscript 设置 UI 页面
5. 脚本持久化存储
预计: 2026-06-05
阶段三:阅读模式 + JS Bridge (P1, ~28h)
1. 移植 Mozilla Readability 到 ArkTS
2. 阅读模式 UI (字体/背景/大小调节)
3. window.via.postMessage JS Bridge
4. 双平台 bridge (ArkWeb + 预留 WKWebView)
预计: 2026-06-12
阶段四:UA + 规则更新 (P2, ~16h)
阶段五:代理 + SSL (P3, ~24h)
🔧 详细实现方案
1. 广告拦截重构 — ABP 引擎 (P0, ~24h)
Via 证据:assets/simple.txt (3143条) + 25个订阅URL + shouldInterceptRequest + ABP 规则解析。
技术架构
ABPRuleParser (ABP 规则解析器)
├─ parseDomainRule(pattern): boolean
├─ parseElemHideRule(selector): string
├─ parseException(url): boolean
└─ match(url, domain): MatchResult
│
ABPAdsBlockManager (拦截管理器)
├─ loadBuiltinRules()
├─ loadRulesFromFile(path)
├─ shouldBlock(url, domain): boolean
├─ getHideCSS(domain): string
└─ updateFromSubscription(url)
实现步骤
- 导入 Via simple.txt (2h) — 直接复制 3143 条规则
- 实现 ABP 规则解析器 (8h)
- 域名规则
||domain^+ 选项$domain=, $third-party - 元素隐藏
##selector - 例外规则
@@||domain^ - 正则规则
/regex/
- 域名规则
- 集成 ArkWeb AdsBlockManager (4h) — 对接鸿蒙原生拦截 API
- 元素隐藏注入 (4h) — CSS
display:none注入 - 在线订阅更新 (6h) — 定时拉取 EasyList / Adguard
2. Userscript 引擎 (P0, ~20h)
Via 证据:// ==UserScript== + // @match + Tampermonkey 文档链接。
技术架构
UserscriptManager (脚本管理器)
├─ scripts: Userscript[]
├─ parseMetadata(block): UserMetadata
├─ installFromUrl(url)
├─ shouldRun(script, url): boolean
└─ injectScript(script, controller)
interface Userscript {
name: string
match: string[] // @match URL patterns
include: string[] // @include URL patterns
exclude: string[] // @exclude URL patterns
runAt: 'document-start' | 'document-end'
code: string // JS 代码
}
实现步骤
- 元数据解析 (6h) — 解析
// ==UserScript==块中的 @name/@match/@include/@run-at - URL 匹配引擎 (4h) — Glob 模式匹配 (
*://*.baidu.com/*) - JS 注入引擎 (6h) —
evaluateJavaScript在适当时机注入 - Userscript UI (4h) — 安装/管理/启用/禁用页面
3. 阅读模式 (P1, ~16h)
Via 证据:https://github.com/mozilla/readability (已集成)。
实现步骤
- 移植 Readability 算法 (8h) — 从 JS 移植到 ArkTS
- 阅读模式 UI (4h) — 字体/背景/大小控制栏
- JS Bridge 数据传递 (4h) — 将正文通过
window.via传回 Native
4. JS Bridge 双平台通信 (P1, ~12h)
Via 证据:window.via.postMessage(secret, data) + window.webkit.messageHandlers。
实现步骤
- 注册 JS Interface (4h) —
controller.addJavascriptInterface - JS Bridge 封装 (4h) —
window.via注入 - 消息路由 (4h) — action 编号 → 对应处理逻辑
📁 文件结构规划
products/default/src/main/ets/
├── managers/
│ ├── ABPRuleParser.ets # [NEW] ABP 规则解析器
│ ├── ABPAdsBlockManager.ets # [NEW] 重构广告拦截管理器
│ ├── UserscriptManager.ets # [NEW] 用户脚本管理器
│ ├── ReadabilityExtractor.ets # [NEW] 阅读模式正文提取
│ └── JSBridge.ets # [NEW] JS Bridge 封装
├── models/
│ ├── ABPRule.ets # [NEW] ABP 规则数据模型
│ ├── Userscript.ets # [NEW] 脚本模型
│ └── FilterSubscription.ets # [NEW] 规则订阅模型
└── pages/
├── UserscriptPage.ets # [NEW] 脚本管理页面
└── ReaderModePage.ets # [NEW] 阅读模式页面
修改文件:
managers/AdBlockManager.ets— 对接 ABP 引擎BrowserPage.ets— 添加阅读模式菜单SettingsPage.ets— 添加脚本管理入口
🧪 测试计划
| 功能 | 核心测试点 |
|---|---|
| ABP 解析器 | ` |
| 元素隐藏 | baidu.com##div.ad CSS 注入正确性 |
| Userscript | @match glob 匹配,document-start vs document-end 时机 |
| Readability | 百度百科/CSDN/知乎正文提取准确率 > 80% |
| JS Bridge | window.via.postMessage → Native 回调链路 |
🚨 风险与缓解
| 风险 | 缓解方案 |
|---|---|
| ABP 规则解析性能 | 预处理:域名 hash 表 + 规则分类索引,O(1) 拦截查询 |
| Readability 移植复杂度 | 使用 Mozilla 官方 Readability.js,通过 NAPI 或 JS 引擎执行 |
| Userscript 安全 | 沙箱执行,不允许 window.eval 超权限调用 |
| 订阅更新频率 | 默认每天 1 次,支持手动刷新,失败 3 次自动禁用 |
🔗 相关文档
本路线图将根据实际情况进行调整和更新。