0

我正在使用摩卡,chai和sinon测试我的Chrome扩展。当我尝试从存根方法的对象,我得到:Chrome扩展单元测试与Sinon一起抛出'unsafe-eval'

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

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

+0

'chrome-extension:// hjkmpahjllmdacbcennobnfcagfdaife/test/test-runner.html'是一个本地链接到PC上的文件。 –

+0

@TomBurris是的,它是。我如何允许这个URL?如果我打包,我会有不同的扩展ID相同的网址。 – pvnarula

+0

我建议复制'test-runner.html'的内容并将其上传到http://www.pastebin.com或类似网站,然后在此处共享该链接。 –

回答

1

为防止跨站点脚本编写Google阻止了eval函数。

为了解决这个这个代码添加到的manifest.json

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

由:abhilash

可以发现here

+0

但是,如果正在运行扩展。但我使用chrome扩展单元测试它的资源:url和扩展资源。如何允许CSP进行Chrome扩展:url的? – pvnarula

1

using eval in Chrome extensions, safely,下面的政策限制被给予:

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

文档中还注意到,

EVAL是一个扩展内危险的,因为它执行的代码可以访问在扩展的高权限环境中的一切。

但是,由于各种库的使用eval()和eval般的构造,如新()函数进行性能优化和便于表达,沙箱介绍了作为一个安全机制,包括在您的项目,这些库而不会影响安全性。

因此,在创建和使用沙箱时,列出清单中的文件。每个应当文件加入了沙箱属性,它看起来像这样运行中沙箱必须在扩展中列出的清单:

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

你可能会通过给定的文档样本,并充分了解有关沙盒。

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