Javascript Can';由于安全策略的原因,你不能使用Raphael JS在Chrome扩展弹出窗口中绘制路径吗?

Javascript Can';由于安全策略的原因,你不能使用Raphael JS在Chrome扩展弹出窗口中绘制路径吗?,javascript,google-chrome-extension,svg,raphael,Javascript,Google Chrome Extension,Svg,Raphael,如果我尝试使用Raphael在Chrome扩展的默认弹出页面中绘制路径: r.path("M0,0L10,10"); 我得到以下错误: Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-s

如果我尝试使用Raphael在Chrome扩展的默认弹出页面中绘制路径:

r.path("M0,0L10,10");
我得到以下错误:

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' chrome-extension-resource:".

我理解不允许eval()之类的东西的必要性,但为什么这是“将字符串作为JavaScript进行评估”?除了设置不安全的安全策略(该策略也会导致允许eval())之外,是否还有其他方法可以生成不带路径字符串的路径?

如果您选中此简单示例

function (params, callback) {
    setTimeout(function () {
        callback(true)
    }, 1000); // CSP
};
上述代码确实违反了CSP,因为我正在执行
setTimeout()
定义中的回调函数,
setTimeout()
接收
callback(true)
的结果,而不是回调本身。这将需要评估,从而触发Chrome安全策略

在类似的行中,我试着查看的源代码,但我的方向不好,我假设这类代码一定涉及到某些方面

在chrome扩展中,没有办法超越Eval CSP,我建议使用另一种解决方法或使用纯SVG方法。

为了在扩展中使用Eval(),请在manifest.json中添加以下行(我假设您使用的是manifest v2)


正如您可能猜到的那样,“不安全评估”指令起到了作用。

Sergii的解决方案正在发挥作用。但是,不建议这样做,因为这会使扩展容易受到XSS攻击

您应该改用沙箱:

谢谢你的把戏,它对我起了作用。但是你认为人们会因此而害怕吗?我正在使用AngularJS,它会出现这个错误。。。我不想为了这个而不得不用其他技术编码……以前可能是这样,但现在已经不适用了。如果从标题中删除
unsafe eval
,则上述代码段可以正常工作。
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"