在Chrome打包应用中使用Angular 2

时间:2016-03-10 16:11:53

标签: angular google-chrome-app

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

3 个答案:

答案 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应用程序页面:

https://developer.chrome.com/apps/app_external#postMessage

答案 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中看到此错误问题

https://github.com/angular/angular/issues/5956