2

我开发了一个网络应用程序并将其作为解压扩展程序上传到我的 Google chrome 应用程序中。在执行期间,我收到以下错误:

拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' 不是以下内容安全策略指令中允许的脚本来源:“default-src 'self' chrome-extension-resource:”。请注意,'script-src' 没有显式设置,因此 'default-src' 用作后备。[淘汰赛-3.0.0-min.js:54]

添加"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"到 manifest.json 会产生一条消息:

'content_security_policy' 仅允许用于扩展和旧版打包应用程序,但这是一个打包应用程序。

这是否意味着我不能使用 knockous.js 为 chrome 应用商店开发应用程序?

如何解决这个问题?

4

2 回答 2

1

淘汰赛不使用 eval 但它确实使用 new Function() 表达式来优化模板中的性能。

要解决此问题,您必须对使用这种类型的字符串到代码转换的组件进行沙箱处理。

这是 chrome 应用程序文档中有关 eval 沙盒的部分:

然而,我们认识到,各种库使用 eval() 和类似 eval 的构造,例如 new Function() 来优化性能和简化表达。模板库特别容易采用这种实现方式。虽然一些(如 Angular.js)开箱即用地支持 CSP,但许多流行的框架尚未更新为与扩展的 eval-less 世界兼容的机制。因此,事实证明,取消对该功能的支持比开发人员预期的问题更大。

文章链接

当然,您可以像往常一样相信 RP Niemeyer 的建议。

于 2014-01-21T16:01:13.333 回答
0

使用淘汰赛安全绑定解决问题。

Knockout.js 安全绑定

于 2014-01-31T13:13:50.013 回答