chrome extension v3 declarativeNetRequest 网络请求修改请求头的一些注意事项

1,756 阅读1分钟

记录:

在chrome extension v3版本中网络请求更换为 declarativeNetRequest

  • 在使用过程中遇到一些问题比如发现动态添加的规则未能生效
// 此方法直接在background.js中先执行
chrome.runtime.onInstalled.addListener(() => {
    modifyHeaderIfNecessary()
})
const modifyHeaderIfNecessary = () =>  {
    chrome.declarativeNetRequest.updateDynamicRules(rules, () => {
        if (chrome.runtime.lastError) {
            console.error(chrome.runtime.lastError);
        } else {
            chrome.declarativeNetRequest.getDynamicRules(rules => console.log(rules));
        }
    });
}
可以设置多个rules,需要注意的是
id:规则的唯一id 必填
priority:规则的优先级 选填
condition:规则被触发的条件 选填(如果不填写的话所有网站所有请求都会触发)
action:匹配到该条规则时进行的操作 必填

const rules = {
    removeRuleIds: [1, 2, 3],
    addRules: [{
        id: 1,
        priority: 1,
        condition: {
            urlFilter: 'pic.ibaotu.com',
            // domains: ['pic.ibaotu.com'],
        },
        action: {
            type: "modifyHeaders",
            requestHeaders: [
                {
                    header: "Referer",
                    operation: "set",
                    value: "https://pic.ibaotu.com/"
                },
                ],
            responseHeaders: [{
                header: "X-DeclarativeNetRequest-Sample",
                operation: "set",
                value: "response"
            }],
        }
    },
        {
        id: 2,
        priority: 2,
        condition: {
            urlFilter: 'c-ssl.duitang.com',
            // domains: ["mp.weixin.qq.com", 'pic.ibaotu.com'],
        },
        action: {
            type: "modifyHeaders",
            requestHeaders: [
                {
                    header: "Referer",
                    operation: "set",
                    value: "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&type=10&appmsgid=1111111&fromview=list&token=11111111&lang=zh_CN"
                },
                // {
                //     header: "origin",
                //     operation: "set",
                //     value: "https://mp.weixin.qq.com"
                // }
                ],
            responseHeaders: [{
                header: "X-DeclarativeNetRequest-Sample",
                operation: "set",
                value: "response"
            }],
        }
    },
        {
        id: 3,
        priority: 3,
        condition: {
            urlFilter: 'mp.weixin.qq.com',
            // domains: ["mp.weixin.qq.com", 'pic.ibaotu.com'],
        },
        action: {
            type: "modifyHeaders",
            requestHeaders: [
                {
                    header: "Referer",
                    operation: "set",
                    value: "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&type=10&appmsgid=1111111&fromview=list&token=11111&lang=zh_CN"
                },
                {
                    header: "origin",
                    operation: "set",
                    value: "https://mp.weixin.qq.com"
                }
                ],
            responseHeaders: [{
                header: "X-DeclarativeNetRequest-Sample",
                operation: "set",
                value: "response"
            }],
        }
    },
    ],
};
  • 在background中修改请求头函数直接直接失败
要注意修改头部的执行时机
chrome.runtime.onInstalled.addListener(() => {
    modifyHeaderIfNecessary()
})