我正在尝试开发 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]);
但我无法找到用户名和密码的属性。看来需要进行不同的设置。
有人可以帮忙吗?
最佳答案
您是否尝试过使用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 在保存密码时不会提示进行身份验证。
关于Firefox 扩展设置代理身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735062/