0

我正在使用 mocha、chai 和 sinon 对我的 chrome 扩展进行单元测试。当我尝试从方法中存根对象时,我得到:

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' blob: filesystem: chrome-extension-resource:".

at createProxy (js/lib/sinon.js:2488:86)
at Function.create (js/lib/sinon.js:2549:29)
at Function.create (js/lib/sinon.js:3337:42)
at Object.stub (js/lib/sinon.js:3289:32)
at Context.<anonymous> (js/spec/sf-companion.spec.js:44:19)
at Test.Runnable.run (js/lib/mocha.js:4529:15)
at Runner.runTest (js/lib/mocha.js:4974:10)
at js/lib/mocha.js:5057:12
at next (js/lib/mocha.js:4899:14)
at js/lib/mocha.js:4909:7

test-runner.html

http://pastebin.com/ij5kD2rY

任何帮助,将不胜感激。提前致谢。

4

2 回答 2

1

Chrome 扩展中使用 eval 时,安全地,给出了以下策略限制:

必须将脚本移出到单独的 JavaScript 文件中,必须将内联事件处理程序转换为 useaddEventListenereval()禁用。

在文档中也指出,

eval 在扩展中是危险的,因为它执行的代码可以访问扩展的高权限环境中的所有内容。

但是,由于各种库使用eval()类似 eval 的构造(例如 new Function() )来优化性能和简化表达,因此引入了沙盒作为一种安全机制,可以在不影响安全性的情况下将这些库包含在您的项目中。

因此,在创建和使用沙箱时,请列出清单中的文件。每个应该在沙箱中运行的文件都必须通过添加沙箱属性在扩展清单中列出,如下所示:

{
  ...,
  "sandbox": {
     "pages": ["sandbox.html"]
  },
  ...
}

您可以浏览给定的示例文档并全面了解沙盒。

此外,GitHub 中的这个线程 - chrome 扩展中的 unsafe-eval 安全错误也可能有所帮助,其中提到这已经是一个已修复的问题。

于 2016-06-09T15:50:05.510 回答
1

为了防止跨站点脚本,谷歌已经阻止了 eval 功能。

为了解决这个问题,将此代码添加到manifest.json

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

作者:abhilash

可以在这里找到

于 2016-06-08T11:44:22.090 回答