Chrome扩展程序:如何以编程方式更改每个页面请求的标题?

时间:2013-12-17 11:55:58

标签: google-chrome google-chrome-extension header response

我目前正在开发Chrome扩展程序,需要添加/更改标头值,但仅限于特定页面。像这样:

chrome.onPageRequest(function(host) {
    if(host == 'google.com') {
        chrome.response.addHeader('X-Auth', 'abc123');
    }
});

非常感谢任何帮助:)

1 个答案:

答案 0 :(得分:6)

您可以使用 chrome.webRequest API 来实现此目的。您需要以下内容:

  1. 在清单中声明适当的权限:

    ...
    "permissions": [
        ...
        "webRequest",
        "*://*.google.com/*"
    ]
    
  2. 注册 chrome.webRequest.onHeadersReceived() 事件的监听器并修改标头。为了能够修改标题,您需要定义'responseHeaders'额外信息(参见监听器函数的第三个参数):

    chrome.webRequest.onHeadersReceived.addListener(function(details) {
        console.log(details);
        details.responseHeaders.push({
            name: 'X-Auth',
            value: 'abc123'
        });
        return { responseHeaders: details.responseHeaders };
    }, {
        urls: ['*://*.google.com/*']
    }, [
        "responseHeaders"
    ]);
    
  3. 请记住,webRequest权限仅在您的背景页是持久性的情况下才有效,因此请从清单中删除相应的行(如果存在 - 应该这样做):

    ...
    "background": {
        "persistent": false,   // <-- Remove this line or set it to `true`
        "scripts": [...]
        ...
    

  4. 另外,请注意,Google通常会根据用户的国家/地区重定向请求(例如,将www.google.com重定向到www.google.gr),在这种情况下,过滤器不会让他们到达您的onHeadersReceived听众。