我正在构建一个 chrome 扩展并面临与 csp 相关的问题。 我正在使用清单 V3
下面是我的csp
"content_security_policy": {
"extension_pages": "script-src 'self' 'unsafe-inline' 'https://cdn.jsdelivr.net/'; object-src 'self'"
}
我在代码中使用 alpine.js 并想运行它。 它在 v2 中运行,但我无法让它在清单 v3 中工作。
谢谢
请参阅迁移到 Manifest V3 (mv3)。
来自外部域的脚本在mv3中不允许,所有脚本必须包含在扩展包中。
"extension_pages"
:- 此策略涵盖您的扩展中的页面,包括 HTML 文件和 Service Worker。这些页面类型由 chrome-extension://
协议提供。例如,您的扩展程序中的页面是 chrome-extension://<extension-id>/foo.html
。
因此
https://cdn.jsdelivr.net/
是mv3中CSP的错误来源。顺便说一句,像 'https://cdn.jsdelivr.net/'
这样的主机源不应在 CSP 中用单引号引用
“我无法让它在清单 v3 中工作”不是问题的技术描述。如果出现问题,控制台中应该会出现诊断消息。
正如 @granty 所写,Manifest v3 中不允许使用外部脚本。
即使 Alpine.js 作为本地 js 文件包含在内,它似乎也使用了 eval(),这也是清单 v3 所禁止的。 仅允许在沙盒页面中使用(应在清单中明确列出),但此类页面有一些限制(例如禁用扩展 API)
"sandbox": {
"pages": ["awesome_alpine.html"]
},
https://developer.chrome.com/docs/extensions/mv3/mv3-migration/#content-security-policy https://developer.chrome.com/docs/extensions/mv3/sandboxingEval/
我遇到了类似的问题,并选择使用js解释器sval。你几乎可以做任何事情,但这有点违背了清单 v3 中定义的“安全”的目的!