Android WebView:在导航前应用代理覆盖
使用 AndroidX WebKit 的功能检查与完成回调,并考虑同一进程内各 WebView 共享的覆盖设置。
依赖 WebView 代理覆盖的导航应当在覆盖的完成监听器执行之后再开始。设置之后立即加载页面会让该操作与异步更新相互竞争。
- 检查
WebViewFeature.isFeatureSupported(WebViewFeature.PROXY_OVERRIDE)。支持情况取决于 WebView 实现与 AndroidX WebKit 库,也取决于 Android 的 API 级别。请定义它不可用时该怎么办;悄悄直接连接可能会让该功能形同虚设。 - 按照其文档化的代理规则、端点语法与绕过行为构建所需的
ProxyConfig。对于获准访问的公开站点,从免费代理列表中选择协议与该 WebView 实现所支持规则相符的候选。PAC URL、SOCKS URI 与裸主机是不同的输入。 - 使用该配置、执行器和完成监听器调用
ProxyController.setProxyOverride()。从完成路径开始依赖它的导航。 - 临时覆盖结束时,用
clearProxyOverride()清除它,并同样处理其异步完成。
让这一生命周期只有一个负责人。该设置作用于整个应用进程中的所有 WebView;反复更改它无法让两个同时存在的视图获得独立的出口。其他进程与 HTTP 库有自己的路径。
这个受支持的接口避免依赖因 Android 版本而异、属于私有的代理变更监听器。它选择路由;代理凭据与证书信任仍使用各自受支持的机制。选择之后出现的身份验证或 TLS 失败需要在那个阶段诊断。