【问题标题】:Try to change UserAgent of chrome-browser with rewriting http-request-header using chrome-webrequest API, but it doesn't work well尝试通过使用 chrome-webrequest API 重写 http-request-header 来更改 chrome-browser 的 UserAgent,但效果不佳
【发布时间】:2020-08-13 05:39:21
【问题描述】:

我正在开发 chrome-extension 以将 UserAgent 更改为您想要的。 我使用 chrome-webrequest API,但我无法从第二次重写它.....

我尝试监控请求标头。 我发现网络请求比第二个请求增加了。

我想解决这个问题。

这是我的代码。 我认为这个问题的原因是chrome.webRequest.onBeforeSendHeaders.addListener(...)

但是,我不知道。

谁能给我一些建议??

class BrowserConfig {
  apply (userAgent, language) {
  let targetURL = "<all_urls>"
  function rewriteHeader(e) {
    e.requestHeaders.forEach(function(header){
      let headerName = header.name.toLowerCase();
      if (headerName === "user-agent") {
        header.value = userAgent;
      }
    });
    return {requestHeaders: e.requestHeaders};
  }
  
  // the cause of this problem....?
  chrome.webRequest.onBeforeSendHeaders.addListener(
    rewriteHeader,
    {urls: [targetURL]},
    ["blocking", "requestHeaders", "extraHeaders"]
  );
}
import BrowserConfig from 'pass/to/BrowserConfig.js'
const browserConfig = new BrowserConfig()

// browserOptions example...  {userAgent: HeadlessChrome}
chrome.storage.local.get('browserOptions', ({ browserOptions }) => {
    this.browserConfig.apply(browserOptions.userAgent)
})

预期行为

// 1st
set userAgent = 'aaaaa'
=> requestHeader = [{name: 'User-Agent', value: 'aaaaa'}]

// 2nd
set userAgent = 'bbbbb'
=> requestHeader = [{name: 'User-Agent', value: 'bbbbb'}]

实际行为

// 1st
set userAgent = 'aaaaa'
=> requestHeader = [{name: 'User-Agent', value: 'aaaaa'}]

// 2nd
set userAgent = 'bbbbb'
=> // webrequest end up send 2 times.....
requestHeader = [{name: 'User-Agent', value: 'aaaaa'}]
requestHeader = [{name: 'User-Agent', value: 'bbbbb'}]

// 3rd
set userAgent = 'ccccc'
=> 
requestHeader = [{name: 'User-Agent', value: 'aaaaa'}]
requestHeader = [{name: 'User-Agent', value: 'bbbbb'}]
requestHeader = [{name: 'User-Agent', value: 'ccccc'}]

【问题讨论】:

    标签: javascript google-chrome-extension user-agent chrome-webrequest


    【解决方案1】:

    我可以看到您已经完成了addListener,但看不到removeListener。如果您不删除侦听器,所有侦听器都会被触发。因此,当您第一次使用“aaaaa”添加它时,它会按预期工作。下一次,有两个动作发生,第一个 'aaaaa' 监听器和第二个 'bbbbb' 监听器,以此类推。

    查看此页面https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeSendHeaders 并在您更新/修改用户代理时删除侦听器。

    【讨论】:

    • 感谢您的建议!我尝试在 addListener 之前添加代码`chrome.storage.onChanged.addListener(chrome.webRequest.onBeforeSendHeaders.removeListener(rewriteHeader))`。但是,它仍然不起作用.......
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2015-10-13
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多