google-chrome - 修改 Chrome 扩展中的响应 header

标签 google-chrome google-chrome-extension

我正在尝试使用我的 Chrome 扩展程序修改 referer-policy header ,但它不会影响响应 header 。

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']);

我添加了调试输出,显示代码相应地修改或添加了 header ,但浏览器本身没有任何影响。

最佳答案

在尝试修改扩展中的响应 header 时,我正在编写完全相同的代码。

// 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 的最后几段中部分:

Starting from Chrome 79, ... On the other hand, response header modifications do not work to deceive CORS checks. If you need to deceive the CORS protocol, you also need to specify 'extraHeaders' for the response modifications.

关于google-chrome - 修改 Chrome 扩展中的响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172613/

相关文章:

javascript - 通过状态栏选择并删除与下一个元素合并

html - 当输入和占位符具有不同的字体大小时,输入的占位符在 Chrome 中未对齐

javascript - 加载图像时,getImageData 提供一些零

javascript - 为什么 serviceworker 会导致每第二个 jquery post 立即停止?

html - link_to_function "javascript:history.back()"在谷歌浏览器中不起作用

javascript - Chrome 扩展程序 - "Port error: Could not establish connection. Receiving end does not exist"

javascript - YUI3 事件在 Firefox 或 Opera 中不起作用,但在 Chrome 中工作正常

javascript - 更改事件窗口 (chrome.tabs)

google-chrome-extension - 谷歌浏览器扩展 - 弹出 js 文件中的 document.body 为空

javascript - Google Chrome 控制台在特定网站的每个页面中运行命令