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

Chrome扩展中chrome.scripting.executeScript覆写fetch失效问题

问题根源与解决方案

当你通过chrome.scripting.executeScript注入脚本时,默认会在**隔离世界(isolated world)**中执行。这个环境和页面自身的主世界(main world)完全隔离——你在隔离世界里覆写的window.fetch只对该隔离环境内的代码生效,页面本身的业务代码还是调用主世界的原生fetch,所以拦截逻辑看起来失效了。而直接在控制台运行代码时,代码是在主世界执行的,自然能覆写页面的fetch。

解决步骤

1. 指定主世界注入

修改background.js中的executeScript调用,添加world: 'MAIN'参数,让脚本直接在页面主世界执行:

chrome.scripting.executeScript({
  target: { tabId: 你的目标TabID },
  files: ['scr.js'],
  world: 'MAIN' // 关键配置,切换到主世界
});

2. 避免全局命名冲突

主世界注入的脚本会和页面自身代码共享全局上下文,建议用IIFE包裹你的拦截逻辑,防止变量污染:

// scr.js 内容
(function() {
  const originalFetch = window.fetch;
  window.fetch = function(...args) {
    // 这里添加你的拦截逻辑,比如打印请求信息
    console.log('拦截到fetch请求:', args);
    // 调用原生fetch并返回结果
    return originalFetch.apply(this, args);
  };
  alert('hi');
})();

3. 确认权限配置

确保你的扩展manifest.json中已正确声明所需权限:

{
  "permissions": ["scripting", "activeTab"],
  "host_permissions": ["<all_urls>"] // 或你需要拦截的特定站点
}

内容的提问来源于stack exchange,提问作者Biplab Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:07:05