web-dev-qa-db-fra.com

Comment réparer l'erreur d'invocation JavaScript inline chrome-extension?

Je crée une extension chrome mais je semble obtenir l'erreur suivante lorsque j'essaie de déclencher un événement 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:"

et

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.

Voici mon 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'"


}
}

Toute aide pour corriger cette erreur serait grandement appréciée.

23
omah94

Par défaut Content Security Policy , les scripts en ligne ne seront pas chargés et seul le script local peut être chargé. Vous pouvez assouplir la politique par défaut en:

  1. Script en ligne. Jetez un œil à Guide officiel , les scripts en ligne peuvent être ajoutés à la liste blanche en spécifiant le hachage codé en base64 du code source dans la politique. Voir tilisation du hachage pour les éléments pour un exemple.

    Mais je crois qu'une meilleure façon d'extraire cette logique dans un script séparé et de ne pas utiliser de script en ligne.

  2. Script à distance. Vous pouvez mettre en liste blanche les ressources de script https://apis.google.com/js/client.js?onload=handleClientLoad par la section suivante dans manifest.json

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

    De plus, je pense qu'une meilleure façon pourrait être de télécharger la télécommande client.js et l'inclure en tant que script local.

S'il vous plaît être conscient selon la description de Inline Script , unsafe-inline ne fonctionne plus.

Jusqu'à Chrome 45, il n'y avait aucun mécanisme pour assouplir la restriction contre l'exécution de JavaScript en ligne. En particulier, s etting une politique de script qui inclut 'unsafe-inline 'n'aura aucun effet .

11
Haibara Ai