Firefox WebExtensions:无法获取已取消的请求数据

Firefox WebExtensions: can not get canceled request data

在使用 Firefox WebExtensions 的过程中,我创建了一个简单的附加组件,可以取消某些 POST 请求并读取其参数:

manifest.json

{
  "description": "Canceled webRequests data",
  "manifest_version": 2,
  "name": "webRequest-demo",
  "version": "1.0",

  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "http://kamil.hism.ru/pocs/*"
  ],

  "background": {
    "scripts": ["background.js"]
  }
}

background.js

var pattern = "http://kamil.hism.ru/pocs/simple_form_action";

function cancel(requestDetails) {
  console.log("Canceling: " + requestDetails.url);
  console.log(requestDetails.requestBody.formData.some_field)
  // debugger
  return { cancel: true };
}

browser.webRequest.onBeforeRequest.addListener(
  cancel,
  { urls:[pattern] },
  ["requestBody", "blocking"]
);

带有表单的目标页面位于此处:http://kamil.hism.ru/pocs/simple_form.html

requestDetails 包含 requestBody 应该包含 formData 对象和所有传递的数据。在 Chrome 中效果很好,但在 Firefox 中 requestBody 只包含 raw 数组和 ArrayBuffer 对象。我尝试使用 String.fromCharCode.apply(null, new Uint16Array(requestDetails.requestBody.raw[0])); 将其转换为字符串,但它 returns 为空字符串。

所以,问题是:有人知道如何解决该问题并使用 Firefox WebExtension 附加组件从已取消的请求中获取所有数据吗?也许这是 Mozilla 的 WebExtensions 实现中的一些错误?

在 Mozilla 社区的 help 中发现这实际上是 Firefox WebExtensions 中的一个错误。虽然我在 bugzilla 中找不到与之相关的确切发行说明或错误,但 Firefox Nightly build (53.0a) 没有这个问题:

希望 Nightly 中的这些更改很快会合并到发布频道中。