enhancementhelp wanted
Repository metrics
- Stars
- (25,154 stars)
- PR merge metrics
- (平均マージ 6d 19h) (30d で 22 merged PRs)
説明
评估使用 flutter_inappwebview 重构解析模块。
现有的解析机制的主要问题在于,我们没有办法在上层拦截并检查 webview 中的所有请求,我们需要这样做来获取视频直链。我们只能通过注入特殊的 JS 脚本来纂改 JS 执行环境间接达到目的。由于浏览器 CORS 限制的存在,我们注入的脚本的作用域不包含网页内嵌的 iframe 。我们不得不使用了大量不干净的方法来绕过这一限制,这导致了解析的相对缓慢,和部分站点的解析失败。
flutter_inappwebview 的文档中提到了一种可能适用于我们应用场景的功能,我们可以劫持所有 webview 内部的网络请求到 dart 层,并将 dart 层网络请求的结果返回 webview 内部。这听上去相当完美。
主要问题在于
-
涉及频繁的 PlatformChannel 通讯,我们需要通过平台通道快速转运 MB 级别的大型对象,这会造成明显的性能损失,且由于通讯过程中平台线程的阻塞,我们可能在解析时出现频繁的应用冻结甚至崩溃。我还没有测试这里实际的性能表现。
-
劫持所有请求到 dart 层意味着我们要处理可能出现的内嵌 iframe 中的可能存在的包含 referer 校验以及 JS 挑战机制,这基本无法解决,我们需要测试由此失效的规则数量是否可以接收。
-
破坏了跨平台一致性,新的插件不兼容 linux 以及 ohos,我们需要在这两个平台上继续使用之前的实现。