失敗の最も可能性の高い原因は、がアクティブなときにデフォルトのコンテンツセキュリティポリシー"manifest_version": 2
がアクティブ化されることです。デフォルトのCSPの結果は、インラインJavaScriptが実行されないことです。
<script>chrome.extension.onConnect.addListener(...);</script>
前の行はインラインコードの例です。解決策は、スクリプトを外部JSファイルに配置することです。
<script src="script.js"><!--original contents moved to script.js--></script>
背景ページ/スクリプト
バックグラウンドページを使用していた場合は、以下を使用 しないでください。
"background_page": "background.htm"
、 また
"background": {"page": "background.htm"}
、
しかし
"background": {"scripts": ["background.js"]}
ここには、のタグbackground.js
内に最初に配置されたスクリプトが含まれています。<script>
background.htm
インラインイベントリスナー
ブラウザアクションポップアップ、アプリランチャー、オプションページなどには、多くの場合、インラインイベントリスナーが含まれています。CSPにより、これらも禁止されています。
<button onclick="test();">
動作しません。解決策は、を使用して外部JSファイルにイベントを追加することですaddEventListener
。例については、ドキュメントまたはこの回答を参照してください。
他の
eval
文字列( 、、、、...)からのJavaScriptの作成は禁止されていFunction
ます。setTimeout
文字列からコードを作成しないようにコードを書き直すか、サンドボックスマニフェストオプション(Chrome 21で導入)を使用します。Chrome 22以降、unsafe-eval
CSPポリシーを使用してこの制限を解除できます。
外部(JavaScript)リソースを拡張機能のコンテキストにロードできないため、JSONPは機能しません。XMLHttpRequest
JSONPの代わりに通常のものを使用してください(詳細情報+例)。
唯一の例外は、リソースがhttps
httpではなくフェッチされる場合です。CSPは、この例外を導入するように調整できます。ドキュメントを参照してください。
"content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
公式ドキュメント
公式ドキュメントには、このトピックに関する優れた説明も記載されています。「チュートリアル:マニフェストV2への移行」を参照してください。