如何修改浏览器扩展 javascript 上的 requestHeaders

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

我正在 Firefox 中开发一个“基本”扩展(插件)来修改请求标头我遵循此处的官方文档(复制/粘贴但不起作用)https://developer.mozilla.org/en-US/ docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onBeforeSendHeaders#details_2 将其更改为下面的示例,但仍然无法使其工作。

在我的清单中,我要求获得文档中提到的所有许可: //清单.json

{
  ...
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "storage",
        "tabs"
  ],
  ...
}

//背景.js

let currentUserAgent = '';

function updateUserAgent(userAgent) {
  currentUserAgent = userAgent;
  console.log('User agent updated:', currentUserAgent); // User agent updated: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
  console.log("Registering onBeforeSendHeaders event listener..."); //Registering onBeforeSendHeaders event listener...
  chrome.webRequest.onBeforeSendHeaders.addListener(
    handleRequest,
    { urls: ["<all_urls>"] },
    ["blocking", "requestHeaders"]
  );
  console.log(chrome.webRequest.onBeforeSendHeaders.hasListener(handleRequest)); //true
}

function handleRequest(details) {
  console.log('Handling request:', details); //NO LOG

  // Check if the 'user-agent' header exists
  const userAgentHeader = details.requestHeaders.find(header => header.name.toLowerCase() === 'user-agent');
  if (userAgentHeader) {
    console.log('User-Agent header found:', userAgentHeader.value); //NO LOG
    userAgentHeader.value = currentUserAgent;
    console.log('User-Agent header updated:', userAgentHeader.value); //NO LOG
  } else {
    console.log('User-Agent header not found in the request headers.'); // NO LOG
  }

  return { requestHeaders: details.requestHeaders };
}

// Retrieve the saved user agent on startup
chrome.storage.local.get('userAgent', (data) => {
  updateUserAgent(data.userAgent || 'Default User Agent');
});

// Listen for messages to update the user agent
chrome.runtime.onMessage.addListener(message => {
  if (message.action === 'updateUserAgent') {
    updateUserAgent(message.userAgent);
  }
});

关于如何使其发挥作用有什么想法吗?

我尝试过的其他事情: 将对象 chrome 更改为浏览器,结果没有改变。

我怎么知道不起作用?

当我进入网络选项卡时,UA 标头没有更改。我还使用 burpsuite 来捕获请求,实际上标头没有改变。

javascript firefox-addon
1个回答
0
投票

我知道你问这个问题已经有一段时间了,所以也许你已经知道答案,但你说:

{
  ...
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "storage",
    "tabs"
  ],
  ...
}

你应该这样做:

{
  ...
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "storage",
    "tabs",
    "*://*/*"
  ],
  ...
}

您需要获得拦截 URL 的权限。当您为过滤器指定

urls
属性时,它的作用就是:过滤。如果您没有 URL 的权限,则过滤器中不会出现任何内容,因此也不会出现任何内容。

您应该将

chrome
替换为
browser
,正如您所说的那样。 迟早
chrome
会消失。

根据您正在做什么,您可能不需要

tabs
。对于问题中的片段,您绝对不需要它。

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