如何在Chrome扩展MV3中使用Ocrad.js?解决unsafe-eval报错
解决MV3环境下ocrad.js因eval()触发的CSP报错问题
方案1:替换为兼容MV3的OCR库
直接换掉ocrad.js,改用Tesseract.js的纯WASM版本——它完全基于WebAssembly实现,不依赖eval()或动态代码执行,天生符合MV3的安全限制。引入后直接调用其OCR接口即可,不需要额外处理CSP问题。
方案2:手动改造ocrad.js源码移除eval()
如果必须保留ocrad.js,找到源码中所有使用eval()或new Function()的地方,把动态执行的代码改成静态定义:
- 搜索源码里的
eval(或new Function(关键词,定位到动态执行的代码段 - 把字符串里的函数逻辑直接提取出来,写成普通的JS函数定义
- 替换掉原来的eval调用,直接调用新定义的静态函数
比如原代码如果是:
const myFunc = eval("function processData(data) { return data.split(''); }");
改成:
function processData(data) { return data.split(''); } const myFunc = processData;
方案3:临时调整CSP策略(不推荐)
如果只是临时测试,可以在扩展的manifest.json中修改CSP规则,给script-src添加'unsafe-eval':
{ "content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval' 'inline-speculation-rules' 'unsafe-eval' http://localhost:* http://127.0.0.1:*;" } }
注意:MV3对扩展的CSP有严格的安全要求,添加'unsafe-eval'会降低扩展的安全性,且可能导致Chrome Web Store审核不通过,仅作为临时应急方案使用。
内容的提问来源于stack exchange,提问作者Niteesh Kalangi
相关产品推荐
相关产品推荐

