web-dev-qa-db-ja.com

chrome-extensionインラインJavaScript呼び出しエラーを修正するには?

chrome拡張機能を作成していますが、onclick()イベントを起動しようとすると、次のエラーが表示されるようです。

Refused to load the script 'https://apis.google.com/js/client.js?onload=handleClientLoad' because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:"

そして

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.

これは私のmanifest.jsonです:

{
  "manifest_version": 2,

  "name": "SECURE",
  "description": "this extension offers secure communication for GMAIL     users",
  "version": "1.0",

 "browser_action": {
 "default_icon": "resources/icon16.png",
 "default_popup": "popup.html",
 "default_title": "Click here!"


 },

 "background":{
   "scripts":["background.js"]
},

 "content_scripts": [
  {
   "matches": ["http://*/*", "https://*/*"],
   "js":["myscript.js"],
   "run_at": "document_end"
  }
  ],
"permissions": ["identity", "https://accounts.google.com/*",  "https://www.googleapis.com/*"],

"oauth2": {
   "client_id": "975410329966.apps.googleusercontent.com",
 "scopes": [
   "<all urls>",
   "https://www.googleapis.com/auth/drive",
   "https://mail.google.com/",
   "https://www.googleapis.com/auth/gmail.login",
   "https://www.googleapis.com/auth/gmail.compose",
   "https://www.googleapis.com/auth/gmail.readonly",
   "https://www.googleapis.com/auth/gmail.send"
  ],

 "content_security_policy":"script-src 'self'  'unsafe-inline' 'unsafe eval'  https://apis.google.com/js/client.js?; object-src 'self'"


}
}

このエラーを修正するための支援は大歓迎です。

23
omah94

デフォルトでは コンテンツセキュリティポリシー で、インラインスクリプトは読み込まれず、ローカルスクリプトのみを読み込むことができます。次の方法でデフォルトのポリシーを緩和できます。

  1. インラインスクリプト。 公式ガイド をご覧ください。インラインスクリプトは、ポリシーでソースコードのbase64エンコードハッシュを指定することでホワイトリストに登録できます。例については、 要素のハッシュの使用法 を参照してください。

    しかし、より良い方法は、このロジックを別のスクリプトに抽出し、インラインスクリプトを使用しないことです。

  2. リモートスクリプト。スクリプトリソースをホワイトリストに登録できますhttps://apis.google.com/js/client.js?onload=handleClientLoad次のセクションのmanifest.json

    "content_security_policy":"script-src 'self' https://apis.google.com; object-src 'self'"
    

    また、リモートclient.jsをローカルスクリプトとして含めます。

インラインスクリプトunsafe-inlineは機能しなくなりました。

Chrome 45までは、インラインJavaScriptの実行に対する制限を緩和するメカニズムはありませんでした。特に、「unsafe-inline」を含むスクリプトポリシーを設定するs '効果はありません

11
Haibara Ai