我正在尝试使用Angular 2创建Chrome打包的应用。但是当我尝试运行我的应用时,我收到以下错误:
EvalError:拒绝将字符串评估为JavaScript,因为' unsafe-eval'以下内容安全策略指令中不允许使用脚本来源:" default-src' self' blob:filesystem:chrome-extension-resource
- >评估chrome-extension://aabbecghjjmmpbagelfmhllgaidcbnmn/app/boot.js
boot.js
的内容是:
System.config({ packages: { app: { format: 'register', defaultExtension: 'js', "defaultJSExtensions": true, } } });
System.import('app/boot').then(null, console.error.bind(console));
我知道AngularJS(angular 1)有一个ng-csp
指令来修复这个Content Security Policy
错误。 Angular 2有类似的东西吗?
有没有办法在打包的应用程序中运行Angular 2?
答案 0 :(得分:1)
因此,您的错误消息显示eval
是问题所在。您是否正在为Angular 2应用程序使用即时编译?我意识到这是一个老问题,但如果您使用AOT(Ahead-of-Time)编译,则不需要使用eval
作为模板:
https://angular.io/guide/aot-compiler
更好的安全性
AOT将HTML模板和组件长时间编译为JavaScript文件 在他们被送达客户之前。没有模板可读,没有 有风险的客户端HTML或JavaScript评估,有更少 注射攻击的机会。
另一个选择是使用<webview>
来托管您的Angular 2应用:
https://developer.chrome.com/apps/tags/webview
这样,您的网页内容就不会被沙盒化,并且Chrome应用的CSP要求也不适用。但是,您无法直接从Angular应用访问Chrome App API。解决方案是在Angular应用程序和托管它的Chrome应用程序之间使用消息传递。 Angular应用程序向主机发送消息,主机调用Chrome App API并将结果发送回Angular应用程序页面:
答案 1 :(得分:0)
使用SystemJS Build https://github.com/systemjs/builder在一个应用程序文件中打包。
然后将其添加到index.html,所以
<script src="angular2-polyfills.js"></script>
<script src="app.min.js" ></script>
您可以修复
EvalError:拒绝将字符串评估为JavaScript,因为'unsafe-eval'不是以下内容安全策略指令中允许的脚本源:“default-src'self'blob:filesystem:chrome-extension-resource < / p>
在manifest.json中使用沙箱https://developer.chrome.com/apps/manifest/sandbox
答案 2 :(得分:-1)
您可以在Angular 2中看到此错误问题