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

Chrome扩展本地脚本违反CSP,manifest.json配置的script-src-elem未被识别

Chrome扩展本地脚本违反CSP,manifest.json配置的script-src-elem未被识别

嘿,我来帮你拆解这个问题~ 你遇到的两个核心问题其实是CSP配置作用域不对和MathJax动态加载资源的路径解析错误,咱们一步步解决:

为什么你的script-src-elem没生效?

你把script-src-elem放在了extension_pages的CSP规则里,但这个字段管的是扩展自己的页面(比如弹窗、设置页),而内容脚本的运行环境和扩展页面是完全隔离的!内容脚本的CSP规则需要单独用content_scripts字段来配置,所以你的规则根本没覆盖到MathJax动态加载脚本的场景。

为什么MathJax会加载错误的脚本路径?

你直接把tex-mml-chtml.js作为内容脚本加载,它会自动动态创建<script>标签加载依赖(比如asciimath.js),但它用的相对路径//../../es5/input/asciimath.js会被解析成目标网站域名下的路径,而不是你扩展内的本地资源,这就触发了CSP拦截。


具体修复步骤

1. 修正manifest.json的CSP配置

更新content_security_policy,给内容脚本单独配置规则,允许加载扩展自身的资源:

"content_security_policy": {
  "extension_pages": "default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; font-src 'self'; style-src 'self' 'unsafe-inline';",
  "content_scripts": "default-src 'self'; script-src 'self' 'wasm-unsafe-eval' chrome-extension://${chrome.runtime.id}; script-src-elem 'self' 'wasm-unsafe-eval' chrome-extension://${chrome.runtime.id};"
}

chrome-extension://${chrome.runtime.id}是Chrome提供的占位符,会自动替换成你的扩展实际ID,确保允许加载扩展内的脚本资源。

2. 调整MathJax的加载方式

不要直接把MathJax脚本作为内容脚本加载,而是在content.js中动态加载,同时指定MathJax的资源根路径为扩展的绝对URL:
首先修改manifest.json的content_scripts,只加载content.js:

"content_scripts": [
  {
    "js": ["content.js"],
    "matches": ["https://oeis.org/*"]
  }
]

然后在content.js中添加以下代码:

// 先加载MathJax配置文件
const configScript = document.createElement('script');
configScript.src = chrome.runtime.getURL('mathjax-config.js');
document.head.appendChild(configScript);

// 提前配置MathJax的资源加载路径,避免相对路径错误
window.MathJax = window.MathJax || {};
window.MathJax.config = window.MathJax.config || {};
window.MathJax.config.loader = {
  paths: {
    mathjax: chrome.runtime.getURL('mathjax/es5')
  }
};

// 加载MathJax主脚本
const mathjaxScript = document.createElement('script');
mathjaxScript.src = chrome.runtime.getURL('mathjax/es5/tex-mml-chtml.js');
document.head.appendChild(mathjaxScript);

这样MathJax会用扩展的绝对URL加载所有依赖,不会再解析成目标网站的路径。

3. 确认web_accessible_resources配置

你的现有配置已经正确开放了MathJax资源,保持即可:

"web_accessible_resources": [
  {
    "resources": ["mathjax/*", "mathjax-config.js"],
    "matches": ["https://oeis.org/*"]
  }
]

做完这些调整后,重新加载扩展,访问目标网站应该就不会再触发CSP错误了。如果还有问题,可以检查一下Chrome扩展的控制台(不是目标网站的控制台),看看有没有其他资源加载的问题。

备注:内容来源于stack exchange,提问作者Max Dudek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:53:05