如何使用带有onAuthRequired的declarativeWebRequest来填写凭据?

问题描述 投票:4回答:1

在我的扩展程序中,我当前正在使用chrome.webRequest.onAuthRequired.addListener来捕获代理身份验证对话框并填写凭据:

咖啡:

chrome.webRequest.onAuthRequired.addListener(handleAuthRequest, 
   {urls: ["<all_urls>"]}, ["asyncBlocking"])


handleAuthRequest = (details, callback) ->
  console.debug "AuthRequest received", details

  credentials:
    username: 'user'
    password: 'password'

  callback credentials

这很好。但是,当浏览器重新启动且插件未完全加载时,将出现一个对话框(which is a known bug)。


在一个Google网上论坛中,有人提到使用新的declarativeWebRequest API,该API阻止了浏览器启动。

这是我当前的实现:

registerRules = ->
  changeRule =
    id: 'auth'
    priority: 100

    # If any of these conditions is fulfilled, the actions are executed.
    conditions: [new chrome.declarativeWebRequest.RequestMatcher(stages: ["onAuthRequired"])]
    actions: [new chrome.declarativeWebRequest.SendMessageToExtension(message: 'authRequest')]

  callback = ->
    if chrome.extension.lastError
      console.error "Error adding rules: " + chrome.extension.lastError
    else
      console.info "Rules successfully installed"
      chrome.declarativeWebRequest.onRequest.getRules null, (rules) ->
        console.info "Now the following rules are registered: " + JSON.stringify(rules, null, 2)


  chrome.declarativeWebRequest.onRequest.addRules [changeRule], callback
  chrome.declarativeWebRequest.onMessage.addListener (details) ->
    console.info details

registerRules()

onAuthRequired阶段条件确实按预期工作,但我正在努力寻找一种方法来使用凭据响应身份验证请求。

根据Documentation,onAuthRequest支持的操作是CancelRequestIgnoreRulesSendMessageToExtension

前两个动作绝对不是正确的选择,但是由于SendMessageToExtension不提供回调,然后我如何提供身份验证请求的凭据

谢谢!


更新:

实际上,当我用此条件替换条件时,onAuthRequired似乎还没有正确触发:

conditions: [new chrome.declarativeWebRequest.RequestMatcher(contentType: ["text/html"])]

然后正确触发了下面的onMessage侦听器,但没有激活onAuthRequired。

chrome.declarativeWebRequest.onMessage.addListener (details) ->
console.warn "onMessage fired", details
javascript google-chrome google-chrome-extension coffeescript
1个回答
0
投票

[没有人建议使用六年的干净解决方案,所以这是我正在使用的鸭嘴胶带:

我一开始就在代理授权弹出窗口上苦苦挣扎。

最终我最终像这样延迟了chrome.webRequest.onAuthRequired.addListenerchrome.proxy.settings.set的初始化:

var config = {
        mode: "fixed_servers",
        rules: {
          singleProxy: {
            scheme: "%protocol",
            host: "%proxy_host",
            port: parseInt(%proxy_port)
          },
          bypassList: ["l"]
        }
      };

function callbackFn(details) {
    return {
        authCredentials: {
            username: "%username",
            password: "%password"
        }
    };
}

setTimeout(function () {
    chrome.webRequest.onAuthRequired.addListener(
        callbackFn,
        {urls: ["<all_urls>"]},
        ['blocking']
    );

    chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});    
}, 1500); // proxy will be set in a 1.5 sec after the browser start

在我的情况下,这是在Selenium测试中使用的,因此我完全可以控制前1.5秒,我可以允许这段时间进行扩展。

© www.soinside.com 2019 - 2024. All rights reserved.