Chrome扩展Manifest V3配置CSP后savehut.xyz脚本仍被拦截问题
问题原因
- Manifest V3 CSP配置格式错误
你当前使用的是Manifest V2的CSP配置格式,Manifest V3不再支持直接在content_security_policy下编写全局script-src规则,必须按执行上下文拆分配置。Chrome没有识别到你编写的自定义规则,因此沿用了默认的script-src 'self'限制,导致远程脚本被拦截。 - Manifest V3 远程代码执行限制
即使配置格式正确,Manifest V3对扩展自身上下文(包括后台服务工作者、popup、options等扩展页面)强制禁止加载远程脚本,只有沙箱页面允许配置远程脚本域名的CSP规则。
你提到的jsdelivr域名脚本可正常加载,大概率是该脚本是注入到普通网页上下文执行的,使用的是对应网页的CSP规则,不受扩展CSP限制。
解决方案
方案一:使用本地脚本(推荐,符合Manifest V3安全规范)
将https://savehut.xyz/files/file.js下载到你的扩展项目目录中,直接用本地相对路径引入:
<script src="/file.js"></script>
本地文件默认命中'self'规则,不需要额外修改CSP即可正常加载。
方案二:使用沙箱加载远程脚本
如果必须使用远程脚本,需要通过沙箱页面托管外部脚本,再通过跨上下文通信完成逻辑交互:
- 修改
manifest.json的CSP配置为Manifest V3兼容格式:
"content_security_policy": { "extension_pages": "script-src 'self' 'unsafe-eval'; object-src 'none';", "sandbox": "sandbox allow-scripts; script-src 'self' 'unsafe-eval' https://cdn.jsdelivr.net/* https://savehut.xyz/* 'unsafe-inline'; object-src 'none';" }, "sandbox": { "pages": [ "/sandbox.html" ] }
- 新建沙箱页面
sandbox.html,在该页面中引入你的远程脚本:
<script src="https://savehut.xyz/files/file.js"></script>
- 扩展的其他页面/后台逻辑通过
postMessage与沙箱页面通信,调用远程脚本提供的能力。
操作校验
修改manifest.json后必须进入Chrome扩展管理页面(chrome://extensions/),点击对应扩展的刷新按钮,新配置才会生效。
内容的提问来源于stack exchange,提问作者ethry
相关产品推荐
相关产品推荐

