Mac版Chromium 131扩展无法加载自身本地脚本求助
问题原因及解决方法
原因
Chromium 130+版本对Content Script的CSP约束机制进行了收紧:
- Content Script的执行环境会直接继承宿主页面的CSP规则,不再完全遵循扩展自身的
content_security_policy配置 - 若宿主页面的CSP未允许加载
chrome-extension://协议的资源,动态通过<script>标签加载扩展内资源(如你用chrome.runtime.getURL获取的chunk脚本)会直接触发CSP拦截
此前Chromium 127版本未启用该严格约束,因此你的扩展可以正常运行。
正确解决方式
方式1:静态声明所有需要的脚本(推荐)
直接在manifest.json的content_scripts字段中,将所有依赖的脚本(包括chunk-5db8bef4.js)添加到js数组里:
"content_scripts": [ { "matches": ["<你的页面匹配规则>"], "js": ["index.js-loader-b0f4707b.js", "assets/chunk-5db8bef4.js"] } ]
这种方式下,Chromium会自动按顺序加载所有脚本,完全绕过宿主页面的CSP限制,是最安全且兼容的方案。
方式2:使用扩展API动态加载(若必须动态加载)
放弃用<script>标签加载的方式,改用chrome.scripting.executeScript API来加载扩展内的chunk脚本:
// 在index.js-loader-b0f4707b.js中执行以下逻辑 chrome.scripting.executeScript({ target: { tabId: chrome.devtools.inspectedWindow.tabId }, files: ["assets/chunk-5db8bef4.js"] }).then(() => { // 脚本加载完成后的业务逻辑 }).catch(err => { console.error("加载chunk脚本失败:", err); });
注意:使用该API需要在manifest.json中声明scripting权限:
"permissions": ["scripting", "<你的其他必要权限>"]
关于content_security_policy配置的说明
你之前修改该配置无效,是因为这个字段仅作用于扩展自身的页面(如弹窗、后台脚本页、选项页),不会影响Content Script的执行环境,所以针对Content Script的CSP问题,调整这个配置没有效果。
内容的提问来源于stack exchange,提问作者Saša Marković
相关产品推荐
相关产品推荐

