web-dev-qa-db-fra.com

Refusé d'exécuter le gestionnaire d'événements en ligne car il viole CSP. (BAC À SABLE)

Je développe une application google chrome packagée, lorsque je mets Sandbox dans le manifest.json:

 {
  "manifest_version": 2,
  "name": "WM32216",
  "version": "2.1",
  "minimum_chrome_version": "23",
  "permissions":["webview", "https://ajax.googleapis.com/*"],
  "sandbox":{
      "pages":["index.html"]
  },
  "app": {
    "background": {
      "scripts": ["main.js"]
    }
  }
}

Un événement onclick sur ma balise d'ancrage fonctionne, et le flux de l'application est complet SAUF QUE, les icônes d'une feuille de style CSS ne se chargent pas.

J'ai reçu un error de la console qui

File not found,

mais ce ne sont que polices donc ça me va,

Le gros problème est que la vidéo dans l'iframe ne joue pas et j'ai eu une erreur supplémentaire avant la police qui sont:

VIDEOJS: ERREUR: (CODE: 4 MEDIA_ERR_SRC_NOT_SUPPORTED) Le support n'a pas pu être chargé, soit parce que le serveur ou le réseau est en panne, soit parce que le format n'est pas pris en charge.

Non autorisé à charger la ressource locale: blob: null/b818b32c-b762-4bd9 -...

Lorsque je supprime le sandbox dans le fichier manifest.json, tout va bien sans erreur dans la console sur la police,

MAIS quand je frappe/clique sur ma balise d'ancrage qui a un événement click pour charger une nouvelle fonction dans le js j'obtiens ce qui suit Erreur de console:

Refus d'exécuter le gestionnaire d'événements en ligne car il enfreint la directive de stratégie de sécurité du contenu suivante: "default-src 'self' blob: filesystem: chrome-extension-resource:". Le mot clé "unsafe-inline", un hachage ("sha256 -...") ou un nonce ("nonce -...") est requis pour activer l'exécution en ligne. Notez également que 'script-src' n'était pas explicitement défini, donc 'default-src' est utilisé comme solution de rechange.

Désolé pour le très long détail,

J'ai juste besoin d'aide avec ça parce que je suis coincé ici depuis 3 jours déjà.

14
JC Borlagdan

Réponse à votre question non liée au bac à sable:

Vous avez quelque chose dans votre code comme ceci:

<button onclick="myFunction()">Click me</button>

En un mot, cela n'est pas autorisé dans les applications et extensions chrome.

Modifiez ceci comme suit et cela fonctionnera:

  • html:

    <button id="myButton">Click me</button>
    <script src="script.js"></script>
    
  • script.js:

    document.getElementById("myButton").addEventListener("click", myFunction);
    
    function myFunction(){
      console.log('asd');
    }
    

Longue histoire:

Dans les applications chrome, la politique de sécurité du contenu n'autorise pas le javascript en ligne. Vous devez donc mettre votre javascript dans un fichier .js et l'inclure dans votre code HTML.

Pour en savoir plus: https://developer.chrome.com/extensions/contentSecurityPolicy

43
kailniris