2012-05-15 97 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动态地设置代理。编辑我的答案。 –