微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试通过使用chrome-webrequest API重写http-request-header来更改chrome浏览器的UserAgent,但效果不佳

如何解决尝试通过使用chrome-webrequest API重写http-request-header来更改chrome浏览器的UserAgent,但效果不佳

我正在开发chrome扩展程序,用于将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: 'bbbbb'}]
requestHeader = [{name: 'User-Agent',value: 'ccccc'}]

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。