The content security policy for Chrome Apps restricts you from doing the following:
You can’t use inline scripting in your Chrome App pages. The restriction bans both <script> blocks and event handlers (<button onclick="...">).
You can’t reference any external resources in any of your app files (except for video and audio resources). You can’t embed external resources in an iframe.
You can’t use string-to-JavaScript methods like eval() and new Function().
위 내용을 정리해보면 이렇습니다.
_크롬앱의 컨텐츠 보안 정책.
1. inline 스크립팅을 쓸수 없습니다. html 페이지에서.
2. 어떤 외부 리소스도 참조할 수 없습니다. 또한, 아이프레임 안에 외부 리소스를 삽입할수도 없습니다.
3. 스트링을 함수화 시키는 eval() 과 같은 함수 사용 불가.
아.. 결국 내부의 데이터만 사용하도록 강요받고 있습니다. xss 취약점을 원천봉쇠하고자 하는 노력이 보입니다.
웹 해킹에 대한 정보가 많이 나오는군요. XSS 검색시...
그리고 아래를 보면...
Your Chrome App can only refer to scripts and objects within your app, with the exception of media files (apps can refer to video and audio outside the package). Chrome extensions will let you relax the default Content Security Policy; Chrome Apps won’t.
다행히.. 크롬 확장프로그램은 완화된다고 하지만, Chrome App 은 그럴일은없을거라고 얘기를 해주네요.
All JavaScript and all resources should be local (everything gets packaged in your Chrome App).
모든 자바스크립트나 모든 리소스들은 로컬 데이터이기를 권장하는군요.
그렇다면 정말 정말 외부 소스를 사용할 수 있는 방법은 없는가...
아래를 보면 또 있습니다..
Use templating libraries
Use a library that offers precompiled templates and you’re all set. You can still use a library that doesn’t offer precompilation, but it will require some work on your part and there are restrictions.
You will need to use sandboxing to isolate any content that you want to do ‘eval’ things to. Sandboxing lifts CSP on the content that you specify. If you want to use the very powerful Chrome APIs in your Chrome App, your sandboxed content can't directly interact with these APIs (see Sandbox local content).
Access remote resources
You can fetch remote resources via XMLHttpRequest and serve them via blob:, data:, or filesystem:URLs (see Referencing external resources).
Video and audio can be loaded from remote services because they have good fallback behavior when offline or under spotty connectivity.
Embed web content
Instead of using an iframe, you can call out to an external URL using a webview tag (see Embed external web pages).
세가지나 있군요.
1. Sandbox와 Chrome API 를 이용한 메인 페이지와 샌드박싱페이지의 교류
2. XMLHttpRequest 에서 blob 등을 통한 외부 리소스 참조. ( 스크립트는 안될것 같습니다)
3. iframe 을 사용해서 처리한다.
이론상으로는 3개를 이용하면 외부 리소스를 사용가능하다고 적혀있습니다.
그러나, 외부 스크립트를 쓸 수 있는 부분에 대해서는 언급이 안되어 있어서 잘모르겠습니다.
추후에 기회가 되면 세가지 방식을 이용하여 스크립트를 외부로부터 가져 올 수 이는지 시도해보도록 하겠습니다.