1

I am developting chrome-extension.

I want to change UserAgent of browser with rewriting http header using chrome-webrequest API, but something is wrong...

I want this codes to behave expected, but I don't know what to do.

Can I give me advices??

BrowserConfig.js

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};
  }
    
  chrome.webRequest.onBeforeSendHeaders.addListener(
    rewriteHeader,
    {urls: [targetURL]},
    ["blocking", "requestHeaders", "extraHeaders"]
  );
}

background.js


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)
})

Expected Behavior

Every time set browserOption, UserAgent change to desired

ex.)

1st: browserOption = {userAgent: HeadlessBrowser} => userAgent: HeadlessBrowser

2nd: browserOption = {userAgent: aaaaaa} => userAgent: aaaaaa

Actual Behavior

Only once, I can change UserAgent to desired. But, from the second time, I cannot change it.

ex.)

1st: browserOption = {userAgent: HeadlessBrowser} => userAgent: HeadlessBrowser

2nd~: browserOption = {userAgent: aaaaaa} => userAgent: HeadlessBrowser

Pirikara
  • 343
  • 3
  • 12
  • 1
    Use chrome.storage.onChanged event. You'll have to rewrite your BrowserConfig to allow changing the data. For example apply() and rewriteHeader() can set/get userAgent in `this`, instead of using the parameter directly, which will allow you to expose an additional method like reconfigure(newData). – wOxxOm Aug 12 '20 at 11:02

0 Answers0