API chrome.webRequest.onAuthRequired.通过API Chrome.webRequest.onAuthRequired在某些网页上授权代理时浏览器中的窗口

7uzetpgm  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(127)

当通过Chrome.webRequest.onAuthRequired API在网页上授权某些代理服务器时,在浏览器中显示。
我已经开发了一个 chrome 扩展,它依赖于通过Chrome API的代理,并使用chrome.webRequest.onAutherred对服务器进行授权。我使用的是Manifesto 3版本。
问题的本质是:连接到扩展服务器后,当在浏览器中重新加载页面时,服务器被授权,但在某些页面上,特别是在Google服务中(例如,https://chrome.google.com/webstore/category/extensions),服务器没有被授权。这表现为Chrome系统授权窗口的结果,该窗口具有用于输入用户名、密码以及完成和确认按钮的字段。要解决问题,你需要转到下一章,在那里你重新加载页面,回到Chrome授权窗口出现,但消失的页面,服务器将被授权。
enter image description here
在不同的Chrome浏览器中,该行为是不同的,但在Chrome中这种行为尤为明显。此外,如果我关闭浏览器,然后再次打开它,但不禁用其扩展,那么授权窗口可能会再次出现,但它已经消失了按下“取消”按钮。
此外,有时会发生授权窗口出现在任何随机页面上,但只需单击“取消”,服务器就被授权了。

`    function authRequired() {
        chrome.webRequest.onAuthRequired.addListener(
          async function (details, callback) {
            const credentials = await new Promise(resolve => {
              chrome.storage.local.get(['selectedIPAddress'], function (result) {
                resolve(JSON.parse(result.selectedIPAddress));
              });
            });
            callback({
              authCredentials: {
                 username: credentials.username,
                password: credentials.password
              }
            });
          },
          { urls: ['<all_urls>'] },
          ['asyncBlocking']
        )
    }
    authRequired()`

我尝试用blocking和asyncBlocking重写auth函数

dxpyg8gm

dxpyg8gm1#

我也有同样的问题,不知道为什么在某些情况下,即使为chrome.webRequest.onAuthRequired定义了一个合适的侦听器,凭据对话框也会出现。
下面似乎提供了一个潜在解决方案的线索:https://adguard-vpn.com/en/blog/mv3-browser-extension.html
“...我们还修复了浏览器弹出请求代理授权的问题。这通常发生在会话存储无法在服务工作者唤醒时触发onAuthRequired事件处理程序之前加载凭据时。”
需要深入研究Github上的代码,看看这是否相关。

相关问题