You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展开发:实现访问站点后定时切换代理的方法

代理定时切换实现方案

原代码的问题在于使用for循环同步遍历代理列表,会一次性快速执行所有代理切换操作,无法实现「访问站点后间隔特定时长再切换」的逻辑。以下是两种可行的实现方案:

方案一:遍历一次代理列表后停止

适合只需要按顺序切换一次所有代理的场景:

var plist = ["154.236.176.30:8081","88.214.41.251:3128"];
// 定义切换间隔时长(单位:毫秒),示例为10秒
const SWITCH_INTERVAL = 10000;

// 启动代理切换流程
startProxySequence();

function startProxySequence() {
  switchToProxy(0);
}

function switchToProxy(index) {
  // 代理列表遍历完毕,终止流程
  if (index >= plist.length) {
    console.log("所有代理切换完成");
    return;
  }

  // 拆分代理地址和端口
  const [proxyHost, proxyPort] = plist[index].split(":");
  // 设置当前代理,完成后触发定时切换
  setProxy(proxyHost, proxyPort, () => {
    setTimeout(() => {
      switchToProxy(index + 1);
    }, SWITCH_INTERVAL);
  });
}

function setProxy(host, port, onComplete) {
  const proxyConfig = {
    mode: "fixed_servers",
    rules: {
      singleProxy: {
        scheme: "http",
        host: host,
        port: parseInt(port)
      },
      bypassList: ["fp.com"]
    }
  };

  chrome.proxy.settings.set({
    value: proxyConfig,
    scope: 'regular'
  }, () => {
    // 完成代理切换后,刷新页面并访问目标站点
    reloadActiveTab(host, port);
    // 通知回调,触发下一次定时切换
    onComplete();
  });
}

function notifyProxyChange(host, port) {
  chrome.notifications.create(
    host,
    {
      type: "basic",
      iconUrl: "icon128.png",
      title: `端口:${port}`,
      message: `已切换代理:${host}`
    },
    () => {}
  );
}

function reloadActiveTab(proxyHost, proxyPort) {
  chrome.tabs.reload();
  notifyProxyChange(proxyHost, proxyPort);
  // 获取当前激活标签页并跳转目标站点
  chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
    if (tabs.length > 0) {
      chrome.tabs.update(tabs[0].id, {url: 'http://www.google.com'});
    }
  });
}

方案二:循环遍历代理列表

适合需要持续循环切换代理的场景(遍历完最后一个后回到第一个继续):

只需修改switchToProxy函数即可:

function switchToProxy(index) {
  const [proxyHost, proxyPort] = plist[index].split(":");
  setProxy(proxyHost, proxyPort, () => {
    // 计算下一个代理索引,实现循环遍历
    const nextIndex = (index + 1) % plist.length;
    setTimeout(() => {
      switchToProxy(nextIndex);
    }, SWITCH_INTERVAL);
  });
}

核心改动说明

  • 用递归+setTimeout替代原for循环,确保每次代理切换、站点访问完成后,再等待指定时长执行下一次切换。
  • 新增SWITCH_INTERVAL常量,可直接修改数值调整切换间隔(1000毫秒=1秒)。
  • 优化回调逻辑,保证代理设置完成后再执行页面刷新和站点访问,避免操作顺序混乱。
  • 增加标签页判断,防止tabs[0]为空导致的报错。

内容的提问来源于stack exchange,提问作者Dark Montaqe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:34:52