我正在尝试开发和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]);
但我无法找到用户名和密码的属性。似乎需要进行不同的设置。
有人可以帮忙吗?
答案 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就不会提示验证。