把 chrome 改名为 browser 并不是对代理扩展的完整移植。

Chrome 的固定服务器配置使用 mode 与 rules 对象。Firefox 则提供自己的全局代理设置接口和按请求处理的 proxy.onRequest API。名称相似并不意味着它们的输入对象可以互换。

先从你想表达的策略入手:单一固定端点、PAC 配置,还是为每个请求单独选择路由。然后再使用各浏览器有文档说明的接口。

Firefox 的按请求监听器可以从扩展代码中返回代理信息。它需要 proxy 权限,以及针对被拦截请求的相应主机访问权限。这与复制一份 Chrome 固定服务器设置对象、再指望浏览器识别每个字段是不同的设计。

同时要确认受支持的 Firefox 版本和 manifest 要求。使用 proxy.register() 的旧示例描述的是更早的 API,不应作为当前扩展的基础。

把共享的策略数据与浏览器专属的适配分开。测试和诊断应当显示每个浏览器中为某个目的地选定的路由,包括刻意得到的直连结果。manifest 有效、API 调用不抛异常,这仅仅是开始。

相关文章