2012-05-15 135 views
2

我有一個在本地主機上運行的代理服務器(127.0.0.1),我有成長累不得不培訓用戶如何在Firefox中切換代理繞過被封鎖的網站。
我決定寫一個插件。我不知道如何使用xpcom告訴Firefox使用某個代理,例如
用於http,使用127.0.0.1端口8080.
互聯網上的例子很少。如何更改使用xpcom的Firefox代理設置

感謝

回答

5

代理設置存儲在preferences。您可能需要更改network.proxy.type,network.proxy.httpnetwork.proxy.http_portdocumentation)。就像這樣:

Components.utils.import("resource://gre/modules/Services.jsm"); 
Services.prefs.setIntPref("network.proxy.type", 1); 
Services.prefs.setCharPref("network.proxy.http", "127.0.0.1"); 
Services.prefs.setIntPref("network.proxy.http_port", 8080); 

如果您需要動態地確定代理的每個網址,你可以通過nsIProtocolProxyService interface使用功能提供商 - 它允許你定義一個「代理過濾器」。像這樣的東西應該工作:

var pps = Components.classes["@mozilla.org/network/protocol-proxy-service;1"] 
      .getService(Components.interfaces.nsIProtocolProxyService); 

// Create the proxy info object in advance to avoid creating one every time 
var myProxyInfo = pps.newProxyInfo("http", "127.0.0.1", 8080, 0, -1, 0); 

var filter = { 
    applyFilter: function(pps, uri, proxy) 
    { 
    if (uri.spec == ...) 
     return myProxyInfo; 
    else 
     return proxy; 
    } 
}; 
pps.registerFilter(filter, 1000); 
+0

謝謝。我在某個地方見過這個。但它有一個全局更改代理的問題,但我更喜歡它每頁都這樣做 –

+1

@DrDeo:將這種事情放入問題通常是一個好主意;)我認爲唯一的方法是更改​​全局代理設置,當頁面開始加載,從我記得沒有負載組的代理設置。但是如果代理選擇邏輯被修復,那麼你可以把它放到一個PAC文件中。 –

+0

@DrDeo:看着這個,顯然我錯了 - 有一種方法可以爲每個URL動態地設置代理。編輯我的答案。 –