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

Manifest V3版本Chrome扩展禁用重启后触发CORS错误问题求助

问题成因

这个是Chrome Manifest V3的已知权限同步缺陷:扩展禁用再重新启用后,已声明的host_permissions授权不会即时同步到已经注入或者即将注入的content script上下文,Chrome会误将这类跨域请求判定为普通网页的跨域请求,强制走CORS校验,所以才会出现首次加载正常、重启扩展后报CORS错误的问题。后端能收到请求是因为请求本身已经成功发出,只是Chrome在响应返回阶段拦截了内容,禁止返回给扩展上下文。

可行解决方案

  • 方案1:优先使用background service worker代发请求
    这是最稳妥的规避方案,background上下文的权限状态永远同步最新,不会出现权限缓存问题:
    1. content script通过chrome.runtime.sendMessage把请求参数发送给background
    2. background收到请求后直接调用fetch发起请求,不需要做额外CORS配置
    3. background把请求结果通过消息回调返回给content script即可
  • 方案2:扩展启动时主动刷新权限缓存
    在background的事件监听中加入权限校验逻辑,主动触发Chrome更新权限缓存:
    // background service worker 代码
    chrome.runtime.onStartup.addListener(async () => {
      const permissions = await chrome.permissions.getAll();
      // 主动重新声明已有权限,触发缓存刷新,不会重复弹出授权提示
      await chrome.permissions.request(permissions);
    });
    
    chrome.runtime.onInstalled.addListener(async () => {
      const permissions = await chrome.permissions.getAll();
      await chrome.permissions.request(permissions);
    });
    
  • 方案3:请求时关闭CORS校验
    如果你的请求不需要获取响应内容,可以直接在fetch参数中添加mode: 'no-cors';如果需要读取响应内容不推荐该方案。
  • 额外注意:你当前配置的https://*.ourdomain.com/*已经完全覆盖https://api.ourdomain.com的所有请求,不需要调整权限规则,如果后续新增其他域名请求,补充对应host_permissions规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:51:02