我正在尝试用我的Chrome扩展修改referer-policy头,但它不影响响应头。
Manifest.json:
{
"name": "My Example Extension",
"version": "1.0",
"description": "",
"permissions": [
"webRequest",
"webRequestBlocking",
"*://*/*"
],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"manifest_version": 2
}background.js:
chrome.webRequest.onHeadersReceived.addListener(details => {
let header = details.responseHeaders.find(e => e.name.toLowerCase() === 'referrer-policy');
// Check if the header has been defined already
if (typeof header !== 'undefined') {
console.log ('Modifying header');
header.value = 'strict-origin';
}
else {
details.responseHeaders.push({ name: 'referrer-policy', value: 'strict-origin' });
}
return {responseHeaders: details.responseHeaders};
}, {urls: ["*://*/*"]}, ['blocking', 'responseHeaders']);我添加了调试输出,这些输出显示代码相应地修改或添加头,但对浏览器本身没有影响。
发布于 2019-12-12 10:29:35
当我试图修改扩展中的响应头时,我编写了完全相同的代码。
// manifest.json
"permissions": [
"webRequest", "webRequestBlocking", "https://developer.chrome.com/*"
]
// background.js
chrome.webRequest.onHeadersReceived.addListener(
function(details) {
const newHeader = {name:"foo", value:"bar"};
const responseHeaders = details.responseHeaders.concat(newHeader);
return { responseHeaders };
},
// filters
{
urls: ["https://developer.chrome.com/*"],
},
// extraInfoSpec
["blocking","responseHeaders"]
);它根本就不起作用。
直到我将最后一个参数更改为:
// extraInfoSpec
["blocking","responseHeaders", "extraHeaders"]它终于起作用了。
通过重新阅读文档,在Life cycle of requests部分的最后几段中:
从Chrome79开始的
,...另一方面,响应头修改不会欺骗CORS检查。如果需要欺骗CORS协议,还需要为响应修改指定'
extraHeaders‘。
发布于 2018-11-06 21:52:39
您没有返回修改后的标头。尝试使用:
chrome.webRequest.onHeadersReceived.addListener(details => {
let myResponseHeaders = details.responseHeaders;
let header = myResponseHeaders.find(e => e.name == 'Referrer-Policy');
// Check if the header has been defined already
if (header) {
console.log ('Modifying header');
let headerIndex = myResponseHeaders.indexOf(header);
myResponseHeaders.splice(headerIndex,1);
}
myResponseHeaders.push({ name: 'Referrer-Policy', value: 'strict-origin' });
return {responseHeaders: myResponseHeaders};
}, {urls: ["*://*/*"]}, ['blocking', 'responseHeaders']);或者使用从documentation复制的略微修改的代码
chrome.webRequest.onHeadersReceived.addListener(
function(details) {
for (var i = 0; i < details.responseHeaders.length; ++i) {
if (details.responseHeaders[i].name === 'Referrer-Policy') {
details.responseHeaders[i].value = 'strict-origin';
break;
}
}
return {responseHeaders: details.responseHeaders};
},
{urls: ["<all_urls>"]},
["blocking", "responseHeaders"]);https://stackoverflow.com/questions/53172613
复制相似问题