1

외부 확장 스크립트 (Gmail 확장을위한 Chrome 확장 프로그램에서)가 XHR/AJAX 요청을 시도하면 실패합니다 . 이 때문에외부로드 스크립트 (Gmail, Chrome 39.x, 콘텐츠 보안 정책)에서 XHR 요청하기

Refused to load the script 'https://<domain-path>.js?' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://talkgadget.google.com/ https://www.googleapis.com/appsmarket/v2/installedApps/ https://www-gm-opensocial.googleusercontent.com/gadgets/js/ https://docs.google.com/static/doclist/client/js/ https://www.google.com/tools/feedback/ https://s.ytimg.com/yts/jsbin/ https://www.youtube.com/iframe_api https://ssl.google-analytics.com/ https://apis.google.com/_/scs/abc-static/ https://apis.google.com/js/ https://clients1.google.com/complete/ https://apis.google.com/_/scs/apps-static/_/js/ https://ssl.gstatic.com/inputtools/js/ https://ssl.gstatic.com/cloudsearch/static/o/js/ https://www.gstatic.com/feedback/js/ https://www.gstatic.com/common_sharing/static/client/js/ https://www.gstatic.com/og/_/js/". 

: Gmail Content Security Policy on Chrome extensions

이 솔루션은 페이지에 외부에서로드 된 스크립트를 주입하기위한 작동합니다

그리고이 질문에서 http://googleonlinesecurity.blogspot.com/2014/12/reject-unexpected-content-security.html. 이 스크립트는 XHR 요청을 만드는 경우, 동일한 방법으로 차단 된 것 :

워크 플로는 다음과 같습니다

  • 확장은 (preloader.js)
  • 머리에 로컬 파일을 주입 gmail.com을 위해 출시 프리 로더는 태그를 삽입하여 외부 Javascript 파일 (actual-code.js)을로드합니다.
  • 실제 확장 코드는 AJAX/XHR 요청을 시도하며 Gmail의 CSP에 의해 차단됩니다.

확장 프로그램에서 CSP를 업데이트하면 이러한 정책이 수동 스크립트가 아닌 콘텐츠 스크립트에 적용되므로 해결되지 않는 것 같습니다. 단점으로

가능한 해결 방법 : 은 -

다른 아이디어 (열심히 확장 버전에 묶여, 최신 상태로 유지하기 위해) 확장의 전체 코드를 포함?

답변

1

안전한 방법은 스크립트에서 사용할 수있는 확장 프로그램의 'API'를 노출하는 것입니다.

태그가있는 페이지에 삽입 된 모든 스크립트가 페이지의 실행 컨텍스트에 있습니다. 그러나 DOM을 콘텐츠 스크립트 (매니페스트 당 XHR을 사용할 수 있음)와 공유합니다.

맞춤 DOM 이벤트를 발생시켜 확장 프로그램에 XHR을 수행하고 다시 결과를 전달하도록 요청할 수 있습니다. 방법은 여기에 설명되어 있습니다 : Gmail Extension, sendMessage to background from page context

+0

나쁜 것도 아니고 그것에 대해서도 생각했지만 정규 AJAX 요청에 대해서는 상당한 양의 리팩토링이 필요했습니다. 확장 내에서 전체 코드를 내용 스크립트로 포장하는 데는 단점이 있지만 원본 삽입 스크립트에서는 수정하지 않아도됩니다. – sergiokas

관련 문제