You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展从Manifest V2迁移至V3:捕获requestBody并修改响应

如何将Manifest V2的GraphQL响应修改逻辑迁移到Manifest V3

Manifest V3废弃了webRequestBlocking权限,而declarativeNetRequest无法直接读取和解析请求体内容,没法用它实现基于请求体键值对的条件判断。这里提供可行的迁移方案:

方案:用Service Worker的Fetch事件实现拦截与修改

这是最贴合原V2逻辑的替代方案,能完整实现“读取请求体→判断条件→返回自定义响应”的流程。

1. 配置Manifest V3清单文件

更新manifest.json,添加Service Worker和必要权限:

{
  "manifest_version": 3,
  "name": "GraphQL响应修改工具",
  "version": "1.0",
  "host_permissions": ["http://*/graphql"],
  "background": {
    "service_worker": "background.js"
  }
}

2. 编写Service Worker逻辑(background.js)

替换原V2的webRequest.onBeforeRequest逻辑,用fetch事件实现相同功能:

// 自定义响应内容,替换成你的实际数据
const newResponse = { /* 例如:code: 200, data: { ... } */ };

self.addEventListener('fetch', (event) => {
  const req = event.request;
  // 过滤条件:POST请求、目标路径是/graphql、且为XHR请求
  if (req.method !== 'POST' || !req.url.endsWith('/graphql')) {
    return; // 不符合条件,直接放行
  }

  // 通过请求头判断是否为XMLHttpRequest(对应原V2的types过滤)
  const isXHR = req.headers.get('X-Requested-With') === 'XMLHttpRequest';
  if (!isXHR) {
    return;
  }

  // 克隆请求:Request的body只能读一次,克隆后不影响原请求放行
  const clonedReq = req.clone();

  event.respondWith(
    clonedReq.text().then(bodyText => {
      try {
        const body = JSON.parse(bodyText);
        // 判断请求体是否包含目标键值对
        if (body.key !== 'value') {
          return fetch(req); // 不符合,放行原请求
        }

        // 返回自定义响应
        return new Response(JSON.stringify(newResponse), {
          headers: { 'Content-Type': 'application/json;charset=utf-8' }
        });
      } catch (err) {
        // 请求体不是合法JSON,放行原请求
        return fetch(req);
      }
    }).catch(err => {
      // 读取请求体失败,放行原请求
      return fetch(req);
    })
  );
});

关键细节说明

  • 请求克隆:必须克隆请求后再读取body,否则原请求的body会被消耗,导致不符合条件时无法正常发送请求。
  • XHR判断:用X-Requested-With请求头识别XHR请求,和原V2的types: ['xmlhttprequest']效果一致。
  • 容错处理:添加了解析失败、读取失败的兜底逻辑,避免拦截逻辑影响正常请求。

关于declarativeNetRequest的说明

declarativeNetRequest只能基于URL、请求头、方法等固定字段做匹配,不支持读取或解析请求体内容,所以没法满足你基于请求体键值对的判断需求,不适合这个场景。

内容的提问来源于stack exchange,提问作者Dwi Siswanto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:53:13