Chrome扩展程序单元测试会引发“不安全评估”问题。与诗乃

时间:2016-06-08 08:34:51

标签: javascript unit-testing google-chrome-extension sinon sinon-chai

我正在使用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

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

2 个答案:

答案 0 :(得分:1)

  

为防止跨网站脚本,Google已阻止了评估功能。

     

要解决此问题,请将此代码添加到 manifest.json

     

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

by:abhilash

可以找到here

答案 1 :(得分:1)

using eval in Chrome extensions, safely中,给出了以下政策限制:

  必须将

脚本移动到单独的JavaScript文件中,必须将内联事件处理程序转换为使用addEventListener,并禁用eval()

在文档中也有提及,

  

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

但是,由于各种库使用eval()和类似eval的结构(如新的Function())来进行性能优化和易于表达,因此引入了沙盒作为安全机制在您的项目中包含这些库,而不会影响安全性。

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

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

您可以查看给定的文档以获取示例并完全了解沙盒。

此外,GitHub中的这个主题 - unsafe-eval security error in chrome extension也可能有所帮助,其中提到这已经是一个固定的问题。