Давайте разберемся с настройкой вашего PAC-файла для селективного туннелирования с использованием прокси-сервера. Код, который вы предоставили, в целом выглядит правильно, но давайте проверим некоторые моменты и попробуем убедиться, что все работает должным образом.
### Шаг 1: Поскольку вы используете `dnsDomainIs`, важно помнить, что это проверка доменов без учета изменений в поддоменах. Если вам нужны более сложные проверки, возможно, вам стоит использовать `shExpMatch`.
### Шаг 2: Убедитесь, что ваш PAC-файл правильно загружается. Также при загрузке PAC-файла убедитесь, что используется правильный URL в вашем `background.js`.
### Шаг 3: Убедитесь, что JavaScript в `popup.js` правильно завершен, и там нет синтаксических ошибок. На текущий момент `document.getElementById` не завершен, что может привести к ошибке при выполнении.
Вот пример исправленного PAC-файла и `background.js`.
#### Пример PAC-файла (`proxy.pac`):
```javascript
function FindProxyForURL(url, host) {
const whitelist = [
"whoer.net",
"google.com"
];
// Проверка на наличие домена в вайтлисте
for (let i = 0; i < whitelist.length; i++) {
if (dnsDomainIs(host, whitelist[i])) {
return "PROXY proxyhost:0000"; // Прокси-сервер и порт
}
}
// Возвращаем настройку для не проксируемых доменов
return "DIRECT";
}
```
#### Пример `background.js`:
```javascript
chrome.runtime.onInstalled.addListener(() => {
console.log("Proxy extension installed.");
});
function setProxyWithPac(pacUrl) {
chrome.proxy.settings.set(
{
value: {
mode: "pac_script",
pacScript: {
url: pacUrl
}
},
scope: "regular"
},
() => {
console.log(`PAC script set to ${pacUrl}`);
}
);
}
const pacUrl = chrome.runtime.getURL("proxy.pac");
setProxyWithPac(pacUrl);
function clearProxy() {
chrome.proxy.settings.clear({ scope: "regular" }, () => {
console.log("Proxy settings cleared.");
});
}
```
#### Пример `popup.js` (с учетом завершенности):
```javascript
const proxyHost = "proxyhost";
const proxyPort = 0000;
const proxyButton = document.getElementById("proxyButton"); // Убедитесь, что у вас есть элемент с ID 'proxyButton'
proxyButton.addEventListener("click", () => {
const pacUrl = chrome.runtime.getURL("proxy.pac");
setProxyWithPac(pacUrl);
});
```
### Дополнительные советы:
1. **Логи:** Добавьте больше `console.log` заявлений, чтобы отследить, где может происходить сбой в вашем коде.
2. **Проверка настройки:** После установки расширения проверьте, правильно ли применяется прокси в инструментах разработчика (вкладка "Network" в Chrome).
3. **Проверка адресов:** Убедитесь, что домены в вайтлисте точно соответствуют тем, которые вы хотите проксировать, включая правильные суффиксы и поддомены.
Если после этого проблемы сохраняются, попробуйте обратиться к документации Chrome о прокси-расширениях и PAC-файлах, или уточните, что именно вызывает трудности.