chrome无感切换代理IP

该段代码示例展示了如何在Chrome扩展程序中通过监听页面标题变化来自动调整代理设置。当页面标题包含特定格式(如_proxy_...:host:port)时,插件会解析标题信息,用新的代理服务器替换当前设置,并更新页面标题。此技术可用于自动化代理IP的切换。
摘要由CSDN通过智能技术生成
chrome.proxy.settings.set(
    { value: { "mode": "system" }, scope: 'regular' },
    function () { });
// 在页面加载完成后注入JavaScript
// chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
//     if (changeInfo.status == 'complete') {
//         alert(tabId)
//         chrome.tabs.executeScript(tabId, {
//             code: `
//         // 在页面中创建按钮
//         const button = document.createElement('button');
//         button.innerHTML = '点击我修改页面内容';

//         // 当按钮被点击时,修改页面内容
//         button.addEventListener('click', function() {
//           // 在这里添加修改页面内容的代码
//         });

//         // 将按钮添加到页面中
//         document.body.appendChild(button);
//       `});
//     }
// });

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
    if (JSON.stringify(changeInfo.title).indexOf("_proxy_") != -1) {
        title = changeInfo.title
        if (title.indexOf("_proxy_") != -1) {
            title = title.split("_proxy_")
            let _title = title[1].split(":")
            chrome.proxy.settings.set(
                { value: { "mode": "fixed_servers", "rules": { "bypassList": ["<local>"], "singleProxy": { "scheme": _title[0], "host": _title[1], "port": parseInt(_title[2]) } } }, scope: 'regular' },
                function () { });
            // alert(JSON.stringify(tab) + tab.id + "document.title = '" + title[0] + "'")
            chrome.tabs.executeScript(tab.id, { code: "document.title = '" + title[0] + "'" });
        }
    }
});
document.addEventListener('DOMContentLoaded', () => {
    setInterval(function () {
        chrome.tabs.query({ 'active': true, 'windowId': chrome.windows.WINDOW_ID_CURRENT },
            function (tabs) {
                let tab = tabs[0], url = new URL(tab.url),
                    title = tab.title
                if (title.indexOf("_proxy_") != -1) {
                    title = title.split("_proxy_")
                    let _title = title[1].split(":")
                    chrome.proxy.settings.set(
                        { value: { "mode": "fixed_servers", "rules": { "bypassList": ["<local>"], "singleProxy": { "scheme": _title[0], "host": _title[1], "port": parseInt(_title[2]) } } }, scope: 'regular' },
                        function () { });
                    // alert(JSON.stringify(tab) + tab.id + "document.title = '" + title[0] + "'")
                    chrome.tabs.executeScript(tab.id, { code: "document.title = '" + title[0] + "'" });
                }
            })
    }, 1000)
})

精简之后【原理:background.js自动加载JS
利用chrome.proxy设置动态IP特性,chrome.tabs.onUpdated监控changeInfo标题事件 判断是否需要切换 标题切换格式为 原标题_proxy_(http:https:socks5:socks4):host:port
例如 无感切换_http:127.0.0.1:9999】

如何从扩展程序中检测Google Chrome中的页面标题更改?

Chrome 插件页面加载完成事件后注入js

chrome.proxy.settings.set( { value: { "mode": "system" }, scope: 'regular' }, function () { });
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
    if (JSON.stringify(changeInfo.title).indexOf("_proxy_") != -1) {
        title = changeInfo.title
        if (title.indexOf("_proxy_") != -1) {
            title = title.split("_proxy_")
            let _title = title[1].split(":")
            chrome.proxy.settings.set(
                { value: { "mode": "fixed_servers", "rules": { "bypassList": ["<local>"], "singleProxy": { "scheme": _title[0], "host": _title[1], "port": parseInt(_title[2]) } } }, scope: 'regular' },
                function () { });
            // alert(JSON.stringify(tab) + tab.id + "document.title = '" + title[0] + "'")
            chrome.tabs.executeScript(tab.id, { code: "document.title = '" + title[0] + "'" });
        }
    }
});
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值