1 修改manifast.json
manifest_version必须为3,因为这个declarativeNetRequest是3中新增的api

{
  "manifest_version": 3,
  "permissions": ["declarativeNetRequest"],
  "host_permissions": ["<all_urls>"]
}

2 在background.js中添加监听请求的代码

const RULE_ID = 1;
chrome.declarativeNetRequest.updateDynamicRules({
  // removeRuleIds用来在添加监听时避免重复监听,也就是预先删除同样id的规则
  removeRuleIds: [RULE_ID],
  addRules: [{
    id: RULE_ID,
    // 定义需要拦截的请求
    condition: {
      urlFilter: "https://apiv3.shanbay.com/news/user_articles?list_type=liked&ipp=10",
      resourceTypes: [chrome.declarativeNetRequest.ResourceType.XMLHTTPREQUEST]
    },
    // 拦截到目标请求后的操作定义
    action: {
      // chrome不允许直接修改初始请求,而是通过重发一次修改后的请求,所以你会看到action.type为REDIRECT
      type: chrome.declarativeNetRequest.RuleActionType.REDIRECT,
      redirect: {
        transform: {
          queryTransform: {
            // 将url中的ipp参数的值改成了100
            addOrReplaceParams: [{ key: "ipp", value: "100" }]
          }
        }
      }
    },
  }]
});

3 验收效果
初始的请求1被Redirect掉了,请求2如预期的返回了结果,原先的业务流程也没有被重定向打断,非常棒
image.png
image.png


热饭班长
3.7k 声望434 粉丝

先去做,做出一坨狗屎,再改进。