如何通过firefox扩展重新发送网络请求?

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

我正在开发一个 FireFox 插件。我想每次发送带有 debug_source: "played_threshold_reached" 的 JSON 请求正文的 PUT Web 请求时,扩展都会使用相同的标头发送它,并且所有内容都完全相同 5 倍。

我为background.js尝试了以下代码:

console.log("Background script loaded");

function arrayBufferToString(buffer) {
  const arr = new Uint8Array(buffer);
  return String.fromCharCode.apply(null, arr);
}

browser.webRequest.onBeforeRequest.addListener(
  async (details) => {
    if (details.method === "PUT") {
      try {
        const requestBody = JSON.parse(arrayBufferToString(details.requestBody.raw[0].bytes));

        if (requestBody.debug_source === "played_threshold_reached") {
          console.log("Intercepted matching request!");

          const repeatRequest = async () => {
            const headers = {};
            details.requestHeaders.forEach(header => {
              headers[header.name] = header.value;
            });

            const response = await fetch(details.url, {
              method: "PUT",
              headers,
              body: JSON.stringify(requestBody),
              mode: "cors",
              credentials: "same-origin"
            });

            if (!response.ok) {
              console.error("Failed to resend request:", response.statusText);
            }
          };

          for (let i = 0; i < 5; i++) {
            console.log(`Sending request ${i + 1}`);
            await repeatRequest();
          }
        }
      } catch (error) {
        console.error("Error processing request:", error);
      }
    }
  },
  { urls: ["<all_urls>"] },
  ["requestBody", "blocking", "extraHeaders", "requestHeaders"]
);

问题是,我什至没有在开头看到“后台脚本已加载”日志!

这是manifest.json文件:

{
  "manifest_version": 2,
  "name": "Request Repeater",
  "version": "1.0",
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "<all_urls>",
    "storage"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  }
}

我确保我添加了 扩展名正确。

javascript firefox-addon httpwebrequest put
1个回答
0
投票

标题“如何通过 Firefox 扩展重新发送 Web 请求?”有点误导。它应该更像是“网络请求处理程序扩展未加载”,因为这是实际的问题。

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

问题是,我什至没有在开头看到“后台脚本已加载”日志!

我没有调试您的代码,但是当我将其作为临时附加组件加载时,我确实将“后台脚本已加载”记录到控制台。确保您正在查看正确的控制台。在

about:debugging
>
This Firefox
上,“检查”您的分机。这是后台记录控制台消息的控制台。

我要指出的另一件事是:

extraInfoSpec
addListener
参数没有有效的“extraHeaders”和“requestHeaders”值。如果您尝试使用这些值加载代码,则会出现未捕获的错误。该错误也显示在控制台中。

  ["requestBody", "blocking", "extraHeaders", "requestHeaders"]

应该只是

  ["requestBody", "blocking"]
© www.soinside.com 2019 - 2024. All rights reserved.