我正在开发一个chrome扩展程序,它提供了一个可供选择的代理列表,用户可以设置他喜欢哪一个。这可以通过以下代码完成:
var proxyConfig = {
mode : "fixed_servers",
rules : {
proxyForHttps : {
scheme: "http",
host: undefined,
port: undefined
},
proxyForHttp : {
scheme: "http",
host: undefined,
port: undefined
},
proxyForFtp : {
host: undefined,
port: undefined
}
}
};
function setProxyConfig (ip, port) {
// sets ip and port for the various protocols
proxyConfig.rules.proxyForHttps.host = ip;
proxyConfig.rules.proxyForHttps.port = port;
proxyConfig.rules.proxyForHttp.host = ip;
proxyConfig.rules.proxyForHttp.port = port;
proxyConfig.rules.proxyForFtp.host = ip;
proxyConfig.rules.proxyForFtp.port = port;
};
setProxyConfig(ip, port);
chrome.proxy.settings.set({value : proxyConfig, scope : 'regular'}, function() {});
现在此代理设置持久。如果您重新启动Chrome,它仍处于活动状态。这就是我遇到问题的地方:代理身份验证。目前,这是通过以下代码完成的:
chrome.webRequest.onAuthRequired.addListener(
function(details, callbackFn) {
callbackFn({
authCredentials: {
username: String(Model.Options.username),
password: String(Model.Options.passwordPlain)
}
});
},
{urls: ["<all_urls>"]},
['asyncBlocking']
);
现在我的问题是,有些用户以启动时重新打开最后打开的标签的方式配置Chrome。现在,他们不是加载标签,而是获取Chrome弹出窗口,要求他们输入当前活动代理的用户名和密码。这是一个问题,因为我们希望通过我们的扩展程序自动执行此操作。理想情况下,用户根本看不到弹出窗口 - 除非她重新启动Chrome并且标签再次重新打开,否则就是这种情况。
因此,这些选项卡已经在请求URL之后,似乎已加载扩展名 - 因为没有为这些选项卡调用chrome.webRequest.onAuthRequired侦听器。
所以问题是: 有没有办法让用户名和密码也持久? 你会怎么处理这个?
也许这是在标签后加载扩展程序的错误?或者我们也可以让听众持久化吗?
提前感谢您的回答!