Violation de la directive de politique de sécurité du contenu : le script en ligne n'est pas conforme à la spécification "script-src 'self'"
P粉276064178
2023-08-15 14:48:52
<p>J'utilise <code>react-create-app</code> pour créer mon extension Chrome. Lorsque j'utilise <code>npm run build</code> dans React-create-app, j'obtiens l'erreur suivante : </p>
<blockquote>
<p>L'exécution du script en ligne est refusée car elle viole la directive de politique de sécurité du contenu suivante : "script-src 'self'". Pour activer l'exécution en ligne, utilisez le mot-clé "unsafe-inline", un hachage ('sha256-5=') ou un nom occasionnel unique ('nonce-...'). </p>
</blockquote>
<p><code>index.html</code>Erreur</p>
<pre class="brush:php;toolbar:false;"><!DOCTYPE html>
<html lang="fr">
<tête>
<meta charset="utf-8" />
<link rel="icône de raccourci" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
<lien
rel="feuille de style"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
intégrité="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonyme"
/>
<!--
Manifest.json fournit des métadonnées utilisées lorsque votre application Web est installée sur l'appareil mobile ou le bureau d'un utilisateur. Voir https://developers.google.com/web/fundamentals/web-app-manifest/
--->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notez l'utilisation de %PUBLIC_URL% dans la balise ci-dessus.
Pendant le processus de construction, il sera remplacé par l'URL du dossier « public ».
Seuls les fichiers du dossier « public » peuvent être référencés à partir du HTML.
Contrairement à "/favicon.ico" ou "favicon.ico", "%PUBLIC_URL%/favicon.ico" fonctionnera correctement sur les routes client et les URL publiques non root.
Exécutez `npm run build` pour savoir comment configurer les URL publiques non root.
--->
<titre>React App</titre>
≪/tête>
<corps>
<noscript>Vous devez activer JavaScript pour exécuter cette application. </noscript>
<identifiant div="racine"></div>
<!--
Ce fichier HTML est un modèle.
Si vous l'ouvrez directement dans votre navigateur, vous verrez une page blanche.
Vous pouvez ajouter des polices Web, des balises méta ou des analyses dans ce fichier.
L'étape de construction placera les scripts regroupés dans des balises ``.
Pour démarrer le développement, exécutez `npm start` ou `yarn start`.
Pour créer un bundle de production, utilisez « npm run build » ou « yarn build ».
--->
</corps>
</html></pre>
<p><strong>manifest.json</strong></p>
<pre class="brush:php;toolbar:false;">{
"version_manifeste": 2,
"name": "Extension Chrome du projet IC",
"description": "Cette extension est un point de départ pour créer une véritable extension Chrome",
"version": "0.0.1",
"action_navigateur": {
"default_popup": "index.html",
"default_title": "Ouvrez la popup"
},
"Icônes": {
"16": "actifs/icône-128.png",
"48": "actifs/icône-128.png",
"128": "actifs/icône-128.png"
},
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}</pré>
<p><br /></p>
Après quelques heures frustrantes, j'ai trouvé une solution qui fonctionne. L'exécution de scripts diffère entre Mac et PC. La plupart des réponses que j'ai trouvées présentaient la différence avec "set" et sans "set". Certains avec "&&", d'autres sans... mais aucun ne fonctionne pour moi.
En bref : utilisez le package npm "cross-env" comme ceci :
Cela fonctionne sur PC, probablement aussi sur Mac. Bien sûr, vous devez
npm install --save-dev cross-env
avant cela.