阻止Chrome网络请求,直到扩展名被初始化

时间:2019-01-04 11:50:00

标签: javascript google-chrome-extension proxy pac proxy-authentication

我正在为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没有用。

在此先感谢您提供的任何提示,建议,解决方案/黑客等。

0 个答案:

没有答案