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
相关产品推荐
相关产品推荐

