簡體   English   中英

在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"]);

function getProxyConfig(d.url)是一個簡單的 function ,它將基於 Z572D4E421E5E6BB711D815E8A 返回適當的 ProxyConfig 對象(模式是directfixed_servers function 不進行任何外部調用,只是從本地存儲中獲取域列表並進行比較。

問題是什么?

Chrome 嘗試代理一些應該被代理的 url,導致ERR_TUNNEL_CONNECTION_FAILED因為代理將只允許代理特定域。如果我將getProxyConfig(d.url) output 記錄到控制台以獲取正在下降的 url,我會看到模式與預期一樣直接。注意:html 頁面可能包含必須/不得代理的兩個鏈接。

chrome.proxy.settings.set是異步的,所以我想也許chrome.webRequest.onBeforeRequestchrome.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM