Predidit/Kazumi

解析模块迭代

Open

#914 aperta il 20 apr 2025

Vedi su GitHub
 (54 commenti) (0 reazioni) (0 assegnatari)Dart (726 fork)batch import
enhancementhelp wanted

Metriche repository

Star
 (25.154 star)
Metriche merge PR
 (Merge medio 6g 19h) (22 PR mergiate in 30 g)

Descrizione

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

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

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

主要问题在于

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

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

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

Guida contributor