[英]Add or remove proxy based on url in chrome extension
我只想通過我的 chrome 擴展代理某些域,但我需要對當前的 url 進行一些檢查,以決定是否需要代理。
chrome.webRequest.onBeforeRequest.addListener(function(d){
chrome.proxy.settings.set({value: getProxyConfig(d.url), scope: 'regular'},function() {});
},{urls:[
"http://*/*",
"https://*/*"]},
["blocking"]);
function getProxyConfig(d.url)
是一個簡單的 function ,它將基於 Z572D4E421E5E6BB711D815E8A 返回適當的 ProxyConfig 對象(模式是direct
或fixed_servers
) function 不進行任何外部調用,只是從本地存儲中獲取域列表並進行比較。
問題是什么?
Chrome 嘗試代理一些不應該被代理的 url,導致ERR_TUNNEL_CONNECTION_FAILED
因為代理將只允許代理特定域。如果我將getProxyConfig(d.url)
output 記錄到控制台以獲取正在下降的 url,我會看到模式與預期一樣直接。注意:html 頁面可能包含必須/不得代理的兩個鏈接。
chrome.proxy.settings.set
是異步的,所以我想也許chrome.webRequest.onBeforeRequest
在chrome.proxy.settings.set
之前執行完畢
在發出請求時,您無法自動修改代理。 您必須創建一個自定義 PAC 腳本,該腳本決定是否代理 URL:
const config = {
mode: "pac_script",
pacScript: {
data: "function FindProxyForURL(url, host) {\n" +
" if (host == 'foobar.com')\n" +
" return 'PROXY blackhole:80';\n" +
" return 'DIRECT';\n" +
"}"
}
}
chrome.proxy.settings.set(
{value: config, scope: 'regular'},
function() {}
)
關於chrome.webRequest.onBeforeRequest
,這在設置代理之后調用,因此您將在那里獲得isProxy
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.