在Chrome扩展程序中修改响应标题

时间:2018-11-06 13:11:37

标签: google-chrome google-chrome-extension

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

Manifest.json:

public final class SomeFragment extends FragmentStatePagerAdapter{
    private final List<Fragment> fragments;
    private Fragment removeFragment; //Fragment to be removed in the next notifydatasetchanged


    @Override
    public int getItemPosition(final Object object) {
       return object.equals(this.removeFragment) ? FragmentStatePagerAdapter.POSITION_NONE : this.fragments.indexOf(object);
    }

}

background.js:

{
  "name": "My Example Extension",
  "version": "1.0",
  "description": "",
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*/*"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  },
  "manifest_version": 2
}

我添加了调试输出,这些输出显示代码相应地修改或添加了标头,但在浏览器本身中没有任何作用。

2 个答案:

答案 0 :(得分:0)

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

// 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部分的最后几段中,通过重新访问文档:

  

从Chrome 79开始,... ...另一方面,修改响应标头无法欺骗CORS检查。如果您需要欺骗CORS协议,还需要为响应修改指定“ extraHeaders”。

答案 1 :(得分:-1)

您没有返回修改后的标题。尝试:

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