J'obtiens cette erreur lors du rechargement de mon Chrome Extension:
Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".
at new Function (<anonymous>)
at evalExpression (compiler.js:33919)
at jitStatements (compiler.js:33937)
at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._interpretOrJit (compiler.js:34520)
at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._compileTemplate (compiler.js:34448)
at compiler.js:34347
at Set.forEach (<anonymous>)
at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._compileComponents (compiler.js:34347)
at compiler.js:34217
at Object.then (compiler.js:474)
J'ai ceci dans mon manifest.json:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
existe-t-il un autre paramètre que je peux utiliser pour éviter cette erreur?
A chrome n'est pas autorisée à utiliser unsafe-eval
, ou eval
du tout en fait.
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_Security_Policy
Lorsque vous créez une extension Chrome extension, comprenez qu'elle est sévèrement limitée par les politiques de sécurité du contenu. Assurez-vous de lire et de comprendre la politique de sécurité du contenu WebExtensions. Si vous voulez avoir un script en ligne comme:
<script>
alert('hello')
</script>
Vous devrez calculer le contenu des balises de script dans sa valeur SHA256 et l'ajouter à votre manifeste pour qu'il puisse être exécuté.
Cela m'a pris quelques heures, mais ce que vous voulez probablement faire, c'est changer le style d'utilisation du webpack de cartographie source. Par défaut, il utilise eval.
https://webpack.js.org/configuration/devtool/
J'ai ajouté ceci à mon webpack.config.js: devtool: 'cheap-module-source-map'
L'astuce était de comprendre pourquoi webpack --mode development
a l'erreur et webpack --mode production
non.
J'utilise également React not Polymer mais je suis sûr que cela s'applique toujours).
Lecture intéressante à surmonter via Manifest
https://developer.chrome.com/extensions/contentSecurityPolicy
JavaScript évalué
La politique contre eval () et ses parents comme setTimeout (String), setInterval (String) et la nouvelle fonction (String) peut être assouplie en ajoutant 'unsafe-eval' à votre politique:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
Cependant, nous vous déconseillons fortement de le faire. Ces fonctions sont des vecteurs d'attaque XSS notoires.