根据 chrome 扩展中的 url 添加或删除代理
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"]);
函数getProxyConfig(d.url)
是一个简单的函数,它将return基于url适当的ProxyConfig对象(模式是direct
或fixed_servers
) .该函数不进行任何外部调用,只是从本地存储中获取域列表并进行比较。
有什么问题?
Chrome 尝试代理一些 url 应该 而不是 的代理导致 ERR_TUNNEL_CONNECTION_FAILED
因为代理只允许特定域 proxied.If 我记录 getProxyConfig(d.url)
下降的 url 输出到控制台 我看到的模式与 expected.Note 一样直接:一个 html 页面可能包含两个 must/must 未被代理的链接。
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
属性。
我只想通过我的 chrome 扩展程序代理某些域,但我需要对当前 url 进行一些检查以决定是否需要代理。
chrome.webRequest.onBeforeRequest.addListener(function(d){
chrome.proxy.settings.set({value: getProxyConfig(d.url), scope: 'regular'},function() {});
},{urls:[
"http://*/*",
"https://*/*"]},
["blocking"]);
函数getProxyConfig(d.url)
是一个简单的函数,它将return基于url适当的ProxyConfig对象(模式是direct
或fixed_servers
) .该函数不进行任何外部调用,只是从本地存储中获取域列表并进行比较。
有什么问题?
Chrome 尝试代理一些 url 应该 而不是 的代理导致 ERR_TUNNEL_CONNECTION_FAILED
因为代理只允许特定域 proxied.If 我记录 getProxyConfig(d.url)
下降的 url 输出到控制台 我看到的模式与 expected.Note 一样直接:一个 html 页面可能包含两个 must/must 未被代理的链接。
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
属性。