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

Chrome Manifest V3扩展注入外部脚本遇CSP错误求助

问题分析与解决办法

你遇到的核心问题是Manifest V3下chrome.scripting.executeScript的files参数不支持加载远程脚本——这个API的files字段仅允许引用扩展包内的本地资源,这是Manifest V3的硬性限制,和内容安全策略无关。另外你之前的CSP配置格式也不符合Manifest V3的要求。

解决步骤

1. 改用fetch加载远程脚本后注入

放弃files参数,先通过fetch获取远程脚本内容,再用func参数执行脚本:

fetch('https://www.example.com/script.js')
  .then(response => response.text())
  .then(scriptContent => {
    chrome.scripting.executeScript({
      target: { tabId: details.tabId },
      func: (scriptCode) => {
        eval(scriptCode);
      },
      args: [scriptContent]
    });
  })
  .catch(error => console.error('远程脚本加载失败:', error));

2. 修正CSP配置

因为用到了eval,需要在CSP中添加'unsafe-eval'(企业内部场景风险可控),同时按照Manifest V3的格式调整:

"content_security_policy": {
  "extension_pages": "script-src 'self' 'unsafe-eval' https://*.example.com; object-src 'self';",
  "content_scripts": "script-src 'self' https://*.example.com; object-src 'self';"
}
  • extension_pages控制扩展自身页面(如后台、弹窗)的CSP规则
  • content_scripts控制注入到目标网页的内容脚本的CSP规则

补充说明

如果顾虑eval的安全风险,也可以将远程脚本转为Blob URL后再通过files参数引用,但实现复杂度更高。对于企业内部场景,上述方法已经足够简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:02:56