Firefox Extension Set Proxy Auth

时间:2015-04-19 19:52:50

标签: firefox proxy firefox-addon

我正在尝试开发和Firefox扩展,它设置代理并在执行此操作后执行其他一些操作。所以我知道如何设置代理http和端口。

var prefManager = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prefManager.setIntPref("network.proxy.type", 1);
prefManager.setCharPref("network.proxy.http",aProxy[0]);
prefManager.setIntPref("network.proxy.http_port",aProxy[1]);

但我无法找到用户名和密码的属性。似乎需要进行不同的设置。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您是否尝试使用nsILoginManager保存密码?在Firefox中,代理的密码与任何其他密码一样处理。

let LoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Components.interfaces.nsILoginInfo, "init");

let loginInfo = new LoginInfo(
    hostname,
    null,
    realm,
    user,
    password,
    '',
    ''
);

let loginManager = Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager);
loginManager.addLogin(loginInfo);

代理没有方案,所以我在Firefox中看到的代码是这样的(来自https://hg.mozilla.org/mozilla-central/file/69d61e42d5df/toolkit/components/passwordmgr/nsLoginManagerPrompter.js#l1400的代码):

// Proxies don't have a scheme, but we'll use "moz-proxy://"
// so that it's more obvious what the login is for.
var idnService = Cc["@mozilla.org/network/idn-service;1"].
                 getService(Ci.nsIIDNService);
hostname = "moz-proxy://" +
           idnService.convertUTF8toACE(info.host) +
           ":" + info.port;
realm = aAuthInfo.realm;
if (!realm)
  realm = hostname;

我认为这只是为了提高可读性(当用户打开密码管理器时),但不应该这样做。

P.S。:还有一个首选项signon.autologin.proxy,如果保存密码,Firefox就不会提示验证。