TypeError:browser.webRequest.onHeaderReceived未定义

时间:2018-02-16 21:45:42

标签: firefox firefox-addon firefox-webextensions

我有一个webextension的简单示例,它试图捕获服务器响应头。 当我调试它时,它会在浏览器中加载。但是Web控制台会记录此错误而不是站点标题:

  

响应头:[object Object],[object Object],[object   对象],[对象对象],[对象对象],[对象对象],[对象   对象],[对象对象],[对象对象],[对象对象],[对象   对象],[对象对象],[对象对象],[对象对象],[对象   对象],[对象对象],[对象对象]

脚本文件:background.js

function logHeader(requestDetails){
  console.log("respons header: " + requestDetails.responseHeaders);
  return {responseHeaders: requestDetails.responseHeaders};
}

browser.webRequest.onHeaderReceived.addListener(
  logHeader,
  {urls: ["<all_urls>"]},
  ["blocking","responseHeaders"]
);

清单文件:manifest.jso

{
  "description": "Demonstrating Response Header",
  "manifest_version": 2,
  "name": "testWebExtResponseHeader",
  "version": "1.0",

  "permissions": [
    "webRequest",
    "<all_urls>",
    "webRequestBlocking"
  ],

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

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

问题在于您尝试console.log对象数组的事情:

  

webRequest.HttpHeaders :HTTP标头数组。每个标头都表示为一个具有两个属性的对象:name和value或binaryValue。

     

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/HttpHeaders

由于您在console.log内部进行了连接,Javascript会尝试将requestDetails.responseHeaders转换为字符串,从而生成[object Object]个字符串数组(自{ {1}}返回anyObject.toString()字符串)。

1。首先对数组进行字符串化

最简单的解决方案是首先使用[object Object]将您尝试记录的对象(此处为request.responseHeaders对象数组)转换为可读字符串:

JSON.stringify

会给你预期的结果:

console.log("response header: " + JSON.stringify(requestDetails.responseHeaders));

2。仅记录数组(不连接)

您也可以直接response header: [{"name":"date","value":"Tue, 13 Mar 2018 20:41:35 GMT"},{ ........ ,这样可以生成正确格式化的交互式结果数组(此处为Firefox 61中的结果):

Firefox 61 - console.log interactive