Predidit/Kazumi

解析模块迭代

Open

#914 geöffnet am 20. Apr. 2025

Auf GitHub ansehen
 (54 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)Dart (726 Forks)batch import
enhancementhelp wanted

Repository-Metriken

Stars
 (25.154 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 6T 19h) (22 gemergte PRs in 30 T)

Beschreibung

评估使用 flutter_inappwebview 重构解析模块。

现有的解析机制的主要问题在于,我们没有办法在上层拦截并检查 webview 中的所有请求,我们需要这样做来获取视频直链。我们只能通过注入特殊的 JS 脚本来纂改 JS 执行环境间接达到目的。由于浏览器 CORS 限制的存在,我们注入的脚本的作用域不包含网页内嵌的 iframe 。我们不得不使用了大量不干净的方法来绕过这一限制,这导致了解析的相对缓慢,和部分站点的解析失败。

flutter_inappwebview 的文档中提到了一种可能适用于我们应用场景的功能,我们可以劫持所有 webview 内部的网络请求到 dart 层,并将 dart 层网络请求的结果返回 webview 内部。这听上去相当完美。

主要问题在于

  1. 涉及频繁的 PlatformChannel 通讯,我们需要通过平台通道快速转运 MB 级别的大型对象,这会造成明显的性能损失,且由于通讯过程中平台线程的阻塞,我们可能在解析时出现频繁的应用冻结甚至崩溃。我还没有测试这里实际的性能表现。

  2. 劫持所有请求到 dart 层意味着我们要处理可能出现的内嵌 iframe 中的可能存在的包含 referer 校验以及 JS 挑战机制,这基本无法解决,我们需要测试由此失效的规则数量是否可以接收。

  3. 破坏了跨平台一致性,新的插件不兼容 linux 以及 ohos,我们需要在这两个平台上继续使用之前的实现。

Contributor Guide