记录:
在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()
})