web-dev-qa-db-ja.com

コンテンツセキュリティポリシー:Chrome拡張機能でGoogle APIをロードできません

これは相対的なChrome拡張機能です。GoogleChart APIを使用する簡単な拡張機能を試しています

アイコンをクリックすると読み込まれるHTMLドキュメント「popup.html」にこのコードがあります。

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script>
  <script type="text/javascript" src="js/popup.js"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script>

  [...]
</body>
</html>

次のメッセージが表示されます。

次のコンテンツセキュリティポリシーディレクティブ「script-src 'self' chrome-extension-resource:」に違反しているため、スクリプト「http://www.google.com/jsapi?key=xxxxxxxxxxx」の読み込みを拒否しました。

私はそれが許可に関連するものであることを理解し、マニフェストファイルを変更しようとしましたが、成功しませんでした:

{
  [...]
  "manifest_version": 2,
  "permissions": ["http://*.google.com/"],
  "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'",
}

何か案が?

30
Laurent

代わりにhttpsプロトコルを使用するようにしてください。表示されるエラーは、 コンテンツセキュリティポリシー に関するものです。

Relaxing the default policyページのセクション。ホワイトリストに登録できるのはHTTPSchrome-extension、およびchrome-extension-resource

22
Some Guy

私は過去12時間この問題に取り組み、ついに機能するようになりました。なぜそんなに時間がかかったのですか?なぜなら、私は何度もトレイルから投げ出されたからです。まず、誤ったリード:

  1. 「HTTPSにする」-関係ありません。 My Chrome拡張機能は、異なるドメインへの通常のHTTP呼び出しを行い、正常に動作します。(更新:もう少し明確になります。「httpsにする」という神話は、人々が外部の.jsファイルを取り込む必要がある場合は、はい、content_security_policyを変更し、httpsのみを受け入れるように見える適切なホスト名を含める必要があります。 REST servicesのようなものの外部ホスト名。前述したように、これにはcontent_security_policyの変更もhttpsも必要ありません。)

  2. 「JQueryでJSONPを使用するAJAX呼び出し」-これは、通常のWebページでクロスドメインAJAXに対処する方法かもしれませんが、必須ではありません組み込みのコンテンツセキュリティポリシーによるchrome拡張機能。さらに、コールバックパラメータを処理するためにサーバー側の変更が必要なため、JSONPの実装はPITAのように聞こえます。まだわからない)いずれにしても、必要ではない。

  3. 「拡張機能でコンテンツセキュリティポリシー(CSP)文字列を使用しない」-マニフェストバージョン2では、デフォルトの文字列「script-src 'self'; object-src 'self'」が正常に機能します。明示的に指定する必要さえありません。必要なのは、拡張機能からヒットしようとしているドメインを「許可」値として含めることです。

ソリューション:

拡張機能からすべてのインラインjavascriptを削除します。別の.jsファイルに入れてください。適切な量​​のjavascriptを含むほとんどのhtmlファイルでは、このプロセスはうまくいかないと思います。幸運なことに、私が持っていたのはbody onloadだけで、代わりにwindow.addlistener onloadイベントとして別のjsファイルに移動することができました。

この問題を乗り越えるために本当に読む必要があるページはこちらです: https://developer.chrome.com/apps/contentSecurityPolicy

28
fivedogit

Augury chrome拡張を実行してAngular app。拡張を無効にするとエラーがなくなります。これはなくなります。拡張機能を書いている人を助けるが、そうでない人を助けるかもしれない。

[Report Only] Refused to load the script 'https://apis.google.com/js/googleapis.proxy.js?onload=startup' because it violates the following Content Security Policy directive: "script-src 'report-sample' 'nonce-EagvF0PX1Z3gVL2Dka1hbA' 'unsafe-inline' 'strict-dynamic' https: http:". 'strict-dynamic' is present, so Host-based whitelisting is disabled. Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
0
intotecho