拒绝将字符串评估为JavaScript,因为'unsafe-eval'不是允许的

时间:2018-01-01 04:32:55

标签: javascript google-chrome-extension angular5

重新加载Chrome扩展程序时出现此错误:

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


    at new Function (<anonymous>)
    at evalExpression (compiler.js:33919)
    at jitStatements (compiler.js:33937)
    at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._interpretOrJit (compiler.js:34520)
    at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._compileTemplate (compiler.js:34448)
    at compiler.js:34347
    at Set.forEach (<anonymous>)
    at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._compileComponents (compiler.js:34347)
    at compiler.js:34217
    at Object.then (compiler.js:474)

我在manifest.json中有这个:

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

我可以使用其他任何设置来避免该错误吗?

5 个答案:

答案 0 :(得分:29)

花了我几个小时,但您可能想要做的是更改webpack使用的源映射的样式。 默认情况下,它使用eval。

https://webpack.js.org/configuration/devtool/

我将此添加到我的webpack.config.js: devtool: 'cheap-module-source-map'

这方面的诀窍是弄清楚为什么webpack --mode development有错误而webpack --mode production没有错误。

我也使用React而不是Polymer,但我很确定这仍然适用。

答案 1 :(得分:4)

实际上,Chrome扩展程序不允许使用unsafe-evaleval

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_Security_Policy

制作Chrome扩展程序时,了解内容安全策略会严重限制它。请务必阅读并理解WebExtensions内容安全策略。如果您想要一个内联脚本,如:

<script>
    alert('hello')
</script>

您必须将脚本标记内容计算为其SHA256值并将其添加到清单中,以便允许执行它。

答案 2 :(得分:1)

感谢@Randy的回答。但是,对于Vue CLI生成的vue项目,没有webpack.config.js,因此该解决方案将在vue.config.js中添加以下配置:

  configureWebpack: {
    devtool: 'cheap-module-source-map'
  }

答案 3 :(得分:0)

有趣的阅读可以通过清单来克服

https://developer.chrome.com/extensions/contentSecurityPolicy

  

JavaScript评估

     

针对eval()及其亲戚的政策   setTimeout(String),setInterval(String)和new Function(String)可以   通过在您的政策中添加“不安全评估”来放松自己:

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

但是,我们强烈建议您不要这样做。   这些功能是臭名昭著的XSS攻击媒介。

答案 4 :(得分:-1)

在使用MVC 5应用程序的情况下,我要做的就是在Visual Studio中安装Nuget软件包:“ NWebsec.Mvc”,并且应用程序运行正常。