0

Cylon project을 기반으로하는 Arduino 코드 편집기로 사용할 크롬 앱을 개발 중입니다. js 스크립트 (이 코드는 output.js이라고 부르 자)는 전환 된 논리 또는 arduino로 달성하려는 다른 것을 통합하고 browserify를 사용하여 다른 노드 종속성과 함께 컴파일합니다. 그들의 chrome extension example에서 그들은이 스크립트를 정적으로 index.html에서 참조합니다.크롬 앱의 DOM에 자바 스크립트를 삽입하는 방법

사용자가 arduino에서 작업하도록 임의의 코드를 작성할 수있는 편집기를 개발 중이므로 output.js의 내용을 동적으로 생성하고 있습니다. 나는 성공적으로 output.js의 내용을 생성 할 수있는 지점에 도달했으며 그 데이터를 script 태그에 삽입하는 함수를 작성했습니다.

Refused to execute inline script because it violates the following Content Security Policy directive: 
"default-src 'self' blob: filesystem: chrome-extension-resource:". 
Either the 'unsafe-inline' keyword, a hash ('sha256-Mugizlz7AFKJ2hm6UA9ySY/31cKCVhLaEX9/QYpJIsk='), 
or a nonce ('nonce-...') is required to enable inline execution. 
Note also that 'script-src' was not explicitly set, so 'default-src' is used as a fallback. 

그래서, 나는 잠재적 인 보안 취약점이 될 수 인라인 자바 스크립트를 실행할 필요가 실현 그러나, 구글 크롬에서 오류가 발생합니다. 나는 content scripts이 웹 페이지에 사용자 정의 JS 또는 CSS를 삽입하도록 특별히 설계되었지만 웹 사이트 또는 웹 주소의 컨텍스트에서 작동한다는 것을 알고 있습니다.

DOM을 수정하고 독립형 Chrome 앱에 맞춤 JS를 삽입하고 일부 웹 사이트 또는 탭의 컨텍스트에서 작동하는 Chrome 확장 프로그램을 삽입하고 싶습니다. 내가 주제에 대해 수행 한 연구 결과가 무엇이든 관계없이 콘텐트 스크립트는 크롬 앱의 올바른 개념이 아닙니다. 어떻게하면 크롬 앱을위한 DOM에 자바 스크립트를 삽입 할 수 있을까요? 이 상황에서 가지고있는 콘텐츠 스크립트의 대안은 무엇입니까?

+0

크롬 앱은 [샌드 박스 페이지]를 선언 할 수있다 (https://developer.chrome.com/apps/manifest/sandbox). – wOxxOm

+0

dev에 실행될 JS 파일의 URL을 허용하는 함수를 만든 [github 포럼의 솔루션] (https://github.com/angular/protractor/issues/2579)을 사용해 볼 수 있습니다. 자세한 코드 참조는이 [코드 샘플] (https://gist.github.com/danharper/8364399)에서 확인하십시오. – noogui

답변

0

오류 메시지에 해시가 포함 된 manifest.json 파일을 만드는 것이 도움이 될 수 있습니다.

예를 들어, 당신 manifest.json는 다음과 같이 보일 수 있습니다 :

{ 
    "manifest_version": 2, 
    "name": "arduino editor", 
    "version": "1.0.0", 
    "minimum_chrome_version": "46", 
    "content_security_policy": "script-src 'self' 'sha256-Mugizlz7AFKJ2hm6UA9ySY/31cKCVhLaEX9/QYpJIsk='", 
    "background": { 
    "page": "background.html" 
    } 
} 

더 깊이있는 정보를 원하시면 다음 게시물을 참조하십시오.

Chrome Extension - Content Security Policy - executing inline code

+0

빠른 답장 Jeff에게 감사드립니다. 나는 비슷한'manifest.json'을 가지고 있지만'output.js'의 내용은 동적으로 바뀔 수 있으므로 Manifest에서'sha256' 서명을 하드 코딩 할 수 없으므로 스크립트가 수정 되 자마자 유효하지 않을 것입니다. –

+0

빌드 시스템에서'sha256'을 다시 계산할 수 있습니까? –

+0

제프가 할 수 있다고해도 새 서명으로'manifest '를 업데이트해야합니다. 나는 그것이 실행 시간 동안 크롬 앱을위한 실현 가능한 옵션이라고 생각하지 않는다. –