当这些事件需要应用所选代理时,在 Manifest V3 service worker 的顶层同步注册 onStartup 和 onInstalled。对于刻意固定为单一线路的扩展:

function applyProxy() {
  chrome.proxy.settings.set({
    value: {
      mode: 'fixed_servers',
      rules: {
        singleProxy: {
          scheme: 'http',
          host: 'proxy.example',
          port: 8080,
        },
      },
    },
    scope: 'regular',
  }, () => {
    if (chrome.runtime.lastError) {
      console.error(chrome.runtime.lastError.message);
    }
  });
}

chrome.runtime.onStartup.addListener(applyProxy);
chrome.runtime.onInstalled.addListener(applyProxy);

manifest 必须声明 proxy 权限并指定这个后台 worker。对于允许的、无需代理认证的公共浏览线路,请把端点替换为 HTTP 代理列表 中的一个候选,并让端口保持为整数。

onStartup 是扩展已安装时的配置文件启动。onInstalled 也包括更新,其中重新加载未打包的扩展也算作更新。窗口创建事件描述每个窗口,并且在同一会话中可能多次触发。

如果扩展保存了配置文件或有开关,应让处理程序加载并应用该选择,而不是在每次更新时重置写死的默认值。监听器注册保持在顶层;当 Chrome 调用处理程序时,异步工作才可以开始。

开发期间分别测试安装和配置文件启动,并分别核对两者的配置结果。它们是两条初始化路径,不是通过打开另一个窗口得到的证据。

相关文章