我有一个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"]
}
}
可能是什么问题?
答案 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()
字符串)。
最简单的解决方案是首先使用[object Object]
将您尝试记录的对象(此处为request.responseHeaders
对象数组)转换为可读字符串:
JSON.stringify
会给你预期的结果:
console.log("response header: " + JSON.stringify(requestDetails.responseHeaders));
您也可以直接response header: [{"name":"date","value":"Tue, 13 Mar 2018 20:41:35 GMT"},{ ........
,这样可以生成正确格式化的交互式结果数组(此处为Firefox 61中的结果):