Создайте папку с именем
Proxy, в нём создайте 2 файла.
Содержимое файла
manifest.json должно быть таким:
{
"name" : "Proxy",
"manifest_version" : 2,
"version" : "1.0",
"description" : "Болванка для создания расширения для смены прокси на лету",
"permissions" : [ "proxy", "webRequest", "webRequestBlocking", "<all_urls>" ],
"background" : { "persistent": true, "scripts": [ "background.js" ] }
}
Содержимое файла
background.js должно быть таким:
// Функция для установки произвольного http-прокси:
function setProxy(address, port, login, password) {
if (typeof address == 'undefined' && typeof port == 'undefined') {
chrome.proxy.settings.clear(
{},
function() {
console.log('Настройки прокси успешно удалены');
}
);
}
else {
if (typeof login == 'undefined' && typeof password == 'undefined') {
window.auth = undefined;
}
else {
window.auth = Object.create(null);
window.auth['login'] = login;
window.auth['password'] = password;
}
chrome.proxy.settings.set(
{
value: {
mode: 'pac_script',
pacScript: {
data: 'function FindProxyForURL(url, host) { return "PROXY '+address+':'+port+'"; }'
}
},
scope: 'regular'
},
function() {
console.log('Прокси http://'+address+':'+port+' успешно установлен');
}
);
}
}
// Автоматиечский ввод логина и пароля, если прокси требует авторизации:
chrome.webRequest.onAuthRequired.addListener(
function(info, callback) {
if (info.isProxy && typeof window.auth !== 'undefined') {
callback({
authCredentials: {
username: window.auth['login'],
password: window.auth['password']
}
});
}
else {
callback();
}
},
{ urls: [ '<all_urls>' ] },
[ 'asyncBlocking' ]
);
// Обнуление настроек прокси сразу после установки расширения:
chrome.proxy.settings.clear({}, function() {});
Далее папку
Proxy установите в качестве расширения в свой браузер:
Меню -> Дополнительный инструменты -> Расширения ->
Режим разработчика -> Загрузить распакованное расширение
Чтобы поменять прокси в браузере, в консоли фоновой страницы расширения достаточно вызывать функцию
setProxy() передав первым параметром адрес прокси, вторым порт, третьим логин, а четвертым пароль. Пример:
setProxy('185.202.3.118', '65233', 'idle', 'dfgfgfgfdd');
Чтобы удалить ранее установленный прокси, достаточно вызывать эту же функцию без параметров. И да, работает только с http-прокси, поддержку socks-прокси я не делал, так как в моем проекте это не было нужно.
Надеюсь вы осознаете, что это просто пример кода для смены прокси в браузере. Разумеется болванку надо переделывать под себя, сделав ему интерфейс, но это уже ваши заботы, бесплатно я это точно не буду делать.