Chrome 扩展开发 API实战:Proxy(七)

1. 引言

在现代浏览器生态中,代理设置是提升网络访问速度、保障隐私安全的重要手段。对于开发者而言,掌握如何在 Chrome 扩展程序中配置代理功能,不仅能满足特定的网络需求,还能为用户提供更灵活的上网体验。本文将以通俗易懂的语言,详细介绍如何在 Chrome 扩展程序中使用 chrome.proxy API 设置代理。

2. 初识 chrome.proxy API

chrome.proxy API 是 Chrome 浏览器提供的用于管理代理设置的接口。通过该 API,开发者可以在扩展程序中动态地配置和控制浏览器的代理行为。要使用此 API,首先需要在扩展程序的清单文件 (manifest.json)中声明相应的权限。

2.1 配置清单文件

manifest.json 中,需要添加 proxy 权限,以允许扩展程序使用代理设置 API。此外,还需指定后台脚本 (background)或服务工作线程 (service_worker),用于处理代理配置逻辑。

复制代码
{
  "manifest_version": 3,
  "name": "代理设置扩展",
  "version": "1.0",
  "permissions": [
    "proxy",
    "storage"
  ],
  "background": {
    "service_worker": "background.js"
  },
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "icon.png",
      "48": "icon.png",
      "128": "icon.png"
    }
  },
  "icons": {
    "16": "icon.png",
    "48": "icon.png",
    "128": "icon.png"
  }
}

2.2 设置代理模式

chrome.proxy API 支持多种代理模式,包括:

  • direct:直接连接,不使用代理。
  • auto_detect:自动检测代理设置。
  • pac_script:使用指定的 PAC (自动配置) 脚本。
  • fixed_servers:使用固定的代理服务器。
  • system:使用系统代理设置。

2.3 代理模式详解

2.3.1 direct 直连模式
复制代码
chrome.proxy.settings.set({ value: { mode: "direct" }, scope: "regular" });

适用于无需使用代理的情况,浏览器会直接连接目标服务器。

2.3.2 auto_detect 自动检测模式
复制代码
chrome.proxy.settings.set({ value: { mode: "auto_detect" }, scope: "regular" });

适用于浏览器自动检测网络环境并选择最佳代理的情况。

2.3.3 pac_script PAC 脚本模式
复制代码
chrome.proxy.settings.set({
  value: {
    mode: "pac_script",
    pacScript: {
      data: "function FindProxyForURL(url, host) { return 'PROXY 127.0.0.1:8080'; }"
    }
  },
  scope: "regular"
});

使用 PAC 脚本进行更高级的代理配置,适用于复杂的网络代理环境。

2.3.4 fixed_servers 固定服务器模式
复制代码
chrome.proxy.settings.set({
  value: {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: "192.168.1.1",
        port: 3128
      }
    }
  },
  scope: "regular"
});

指定固定的代理服务器,适用于明确的代理环境。

2.3.5 system 系统代理模式
复制代码
chrome.proxy.settings.set({ value: { mode: "system" }, scope: "regular" });

使用操作系统默认的代理设置。

3. 监听代理设置事件

在某些情况下,我们希望在代理设置变更时执行特定操作,比如通知用户或者记录日志。Chrome 提供了 chrome.proxy.settings.onChange 事件用于监听代理配置的变化。

3.1 监听代理变化

复制代码
chrome.proxy.settings.onChange.addListener(function(details) {
  console.log("代理设置已更改:", details);
});

3.2 获取当前代理设置

有时候,我们需要获取当前的代理设置,比如在扩展的 UI 中显示当前代理信息。可以使用 chrome.proxy.settings.get 方法来实现:

复制代码
chrome.proxy.settings.get({
  incognito: false
}, function(config) {
  console.log("当前代理设置:", config);
});

4. 代理身份验证

某些代理服务器需要身份验证,Chrome 扩展程序可以监听 onAuthRequired 事件并提供用户凭据。

复制代码
chrome.webRequest.onAuthRequired.addListener(
  function(details, callback) {
    callback({
      authCredentials: {
        username: "your-username",
        password: "your-password"
      }
    });
  },
  { urls: ["<all_urls>"] },
  ["asyncBlocking"]
);

5. 总结

通过此文,我们介绍了 Chrome 扩展程序中如何配置代理,并提供了不同代理模式的使用示例。我们还讨论了如何监听代理变化事件,并在代理服务器需要身份验证时提供用户凭据。使用 chrome.proxy API,开发者可以在扩展中实现自定义代理,以适应不同网络环境下的需求。在下一篇文章中,我们将进一步探讨如何通过 PAC 脚本实现高级代理配置。

相关推荐
一乐小哥12 小时前
坚持迭代一个 Chrome 插件半年后,我的同事问我:"这不是 Chrome 自带的功能吗?"
chrome·github·ai编程
架构源启14 小时前
OpenClaw 只能手动写脚本?我用 Chrome 插件实现了“录制即生成“
前端·人工智能·chrome·自动化
irpywp20 小时前
苦于AI生成的网页千篇一律且粗糙?design-md-chrome :一款网页样式提取插件 ,将任意网站的视觉规范转化为大模型可读的代码指令!
前端·人工智能·chrome·开源·github
chenhua21 小时前
狗头管家终端工作台 - 让多终端管理变得优雅
前端·chrome·terminal·gemini·opencode·cluade
Riu_Peter1 天前
【技巧】如何在 Ubuntu 中安装 .deb 软件包
linux·chrome·ubuntu
雁鸣零落2 天前
如何在 Chrome 中查看其他浏览器的书签?书签空间订阅与侧边栏只读切换指南
前端·chrome·edge浏览器
雁鸣零落2 天前
跨浏览器书签怎么在多设备间同步?云加密同步、冲突合并与 VertiTab 完整指南
chrome·edge浏览器
追逐梦想永不停2 天前
记录一个好用的excel判断数字格式的公式
前端·chrome·excel
John_ToDebug2 天前
深入剖析 WebHostView:浏览器内核中的桌面级 Web 宿主
chrome
John_ToDebug2 天前
隐于无形,触手可及:Chrome 互动滚动条的六个设计密码
chrome·windows·ui