我正在为Chrome浏览器开发代理扩展。我的扩展程序使用以下命令设置浏览器的代理配置:
chrome.proxy.settings.set({
value: config,
scope: 'regular',
});
配置使用fixed_servers
模式的地方。
代理服务器需要身份验证,因此我拥有:
chrome.webRequest.onAuthRequired.addListener(details => {
// Some logic
return {
authCredentials: {
username: usernameValue,
password: passwordValue,
},
};
});
直到最新的第71个Chrome版本,此逻辑均按预期运行:
Browser boots > extensions initialized > all traffic goes through proxy and auth requests from proxy server are handled by listener
。
从第71版开始,浏览器似乎不等待扩展名被初始化(问题在“硬退出”之后出现,即使用command + Q
)并开始发送请求。由于已经设置了代理配置:
Requests go through proxy > proxy server requests authentication > extension is still not initialized by browser, therefore auth request listener is not added in the background as well - since there is nothing to intercept auth requests - native auth prompt is sown for the user
。
这在扩展初始化后,在非常糟糕的UX +时刻结束,监听器已经就位,因此用户可以填写提示并提交,或者只是取消-无论如何,代理及其身份验证有效。
我正在寻找这种情况的解决方案。 也许有一种方法可以为浏览器设置一些配置,以防止它在初始化某些扩展名之前发出请求,或者有某种方法可以在浏览器退出之前挂起/重置/清除代理配置(然后我可以在初始化时手动设置代理)。或针对给定情况的任何其他修复。
我已经尝试使用chrome.windows
方法来监视何时创建和删除浏览器窗口,并在最后一个删除窗口时尝试调用chrome.proxy.settings.clear({ scope: 'regular' }, function() {...});
,但是据我了解,只有{{1} }设法在退出之前发生,而sync
却没有,因此async
没有用。
在此先感谢您提供的任何提示,建议,解决方案/黑客等。