Firefox 更新之后, 之前的代理扩展越来越不好用了, 索性就把它移除了, 然后用自动代理脚本来 实现智能代理和广告过滤.

但是, 找了一些资料, 关于 PAC 的具体实现, 并没有太多说明. 后来就去 firefox 源代码里面 找了找. Firefox 对 PAC 的支持是在 netwerk/base/ProxyAutoConfig.cpp 里面实现的.

有 PAC 脚本上下文里面, 插入了一些本地的辅助函数, 其中:

  • alert(msg), 用来打印调试信息的, 内容会输出到 Firefox 的 Web Console 里.
  • myIpAddress(),
  • dnsResolve(), 用于解析 DNS 记录.

Firefox 在读取用户自己的 PAC 脚本之后, 会先声明一些别的函数, 具体放在了 sPacUtils 这个 常量里面, 可以参考附件.

另外, 过滤广告的做法也很简单, 只需要针对相应的广告域名返回一个空白的无效的代理就可以了. 与 原先的 Adblock Plus 扩展相比, 这个效率要很多了.

附件