首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于安全策略,无法使用Raphael JS在Chrome扩展弹出窗口中绘制路径?

由于安全策略,无法使用Raphael JS在Chrome扩展弹出窗口中绘制路径?
EN

Stack Overflow用户
提问于 2013-02-13 22:15:38
回答 3查看 4.8K关注 0票数 5

如果我尝试使用拉斐尔在default_popup页面中为我的Chrome扩展绘制一个路径:

代码语言:javascript
复制
r.path("M0,0L10,10");

我得到以下错误:

代码语言:javascript
复制
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()之外,有没有其他方法来生成不带路径字符串的路径?

EN

回答 3

Stack Overflow用户

发布于 2013-02-18 18:43:16

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

代码语言:javascript
复制
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

正如您可能猜到的那样,指令'unsafe-eval‘可以做到这一点。

票数 17
EN

Stack Overflow用户

发布于 2013-06-21 15:55:43

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

你应该改用沙箱:http://developer.chrome.com/apps/sandboxingEval.html

票数 3
EN

Stack Overflow用户

发布于 2013-02-14 15:09:31

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

代码语言:javascript
复制
function (params, callback) {
    setTimeout(function () {
        callback(true)
    }, 1000); // CSP
};

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

在类似的代码行中,我试图查看Raphel path的源代码,但我不是在一个好的方向上,我假设这类代码一定涉及到一些地方。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14855541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档