5

如果我尝试使用 Raphael 在 default_popup 页面中为我的 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() 的不安全安全策略之外,还有其他方法可以在没有路径字符串的情况下生成路径吗?

4

3 回答 3

17

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

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

正如您可能猜到的那样,指令“unsafe-eval”可以解决问题。

于 2013-02-18T10:43:15.597 回答
3

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

您应该改用沙盒:http: //developer.chrome.com/apps/sandboxingEval.html

于 2013-06-21T07:55:42.870 回答
0

如果你检查这个简单的例子。

function (params, callback) {
    setTimeout(function () {
        callback(true)
    }, 1000); // CSP
};

上面的代码确实违反了CSP,因为我在setTimeout()定义中执行回调函数, setTimeout()接收结果callback(true)而不是回调本身。这将需要一个 eval 并因此触发 Chrome 安全策略。

在类似的行中,我尝试查看Raphel path的源代码,但我的方向不是很好,我假设某些地方必须涉及这种代码。

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

于 2013-02-14T07:09:30.873 回答