web-dev-qa-db-fra.com

Erreur de directive relative à la politique de sécurité du contenu de l'extension Chrome

J'essaie de créer une extension chromée du flux radio, mais il y a un problème. Lorsque j'exécute mon script dans un navigateur comme d'habitude JS + HTML + CSS, cela fonctionne, mais lorsque j'essaie de l'exécuter comme une extension Chrome, j'obtiens cette erreur:

Refusé d'exécuter le script en ligne parce qu'il enfreint le .__ suivant. Directive relative à la sécurité du contenu: "script-src 'self' Chrome-extension-resource:". Soit le mot clé 'unsafe-inline', a hash ('sha256 -...') ou un nonce ('nonce -...') est requis pour activer exécution en ligne.

Après cela, j'ai ajouté ceci à mon manifeste:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

Mais après cela, je recevais un message d'erreur (erreur dans la ligne manifeste avec le code ci-dessus)


Ceci est mon manifeste:

{
   "background": {
      "scripts": [ "jquery.js", "jquery-ui.js", "plate.js" ]
        },

   "browser_action": {
      "default_icon": "Images/action-normal.png",
      "default_popup": "player.html",
      "default_title": ""
   },
   "description": "Chrome Player",
   "manifest_version": 2,
   "name": "Radio Chrome Player",
   "permissions": [ "http://www.radio-station.com/" ],
   "version": "1.0"

   "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

}

C'est le fichier html principal:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="jquery.js"></script>
<script src="jquery-ui.js"></script>
<script src="main.js"></script>
<script>$(function(){$("#radioplayere").plate({playlist: [{file:"http://RADIO_STATION_STREAM_URL/;"}], phpGetter: "http://hostingshoutcast.com/stream/plate/php/plate.php"});});</script>
</head>
<body>
<div id="radioplayer">If you are seeing this then an error has occurred!</div>
</body>
</html>
18
user3397388

Vos problèmes sont les suivants:

  1. Chrome CSP interdit le code en ligne et ne peut pas être remplacé. Votre 'unsafe-eval' ne résout pas le problème et 'unsafe-inline' qui aurait aidé sera ignoré par Chrome.

    Vous devez vous débarrasser du code en ligne:

    <script>$(function(){$("#radioplayere").plate({playlist: [{file:"http://RADIO_STATION_STREAM_URL/;"}], phpGetter: "http://hostingshoutcast.com/stream/plate/php/plate.php"});});</script>
    

    Cela doit être déplacé dans un fichier js.

  2. Il y a une faute de frappe dans votre manifeste.json, vous avez oublié une virgule:

    "version": "1.0",
    

    En général, utiliser un JSON validator peut vous aider à détecter ces erreurs.

18
Xan

Pour moi, la raison est que j'utilise une version plus ancienne (telle que v1.7) de jQuery qui aCSPproblèmes, choisissez une nouvelle version (v2.1.3).

1
Sam Su

Je sais que je suis un peu en retard par rapport à cela, mais compte tenu des commentaires de OP sur la réponse de Xan, un autre élément de la résolution du problème consisterait à ajuster l'appel AJAX qui est impliqué.

Je recevais la même erreur et ajusté mon appel d'API pour être:

dataType: 'json'

au lieu de:

dataType: 'jsonp'

(Résolution du problème, d'accord, il restera encore à supprimer tout script en ligne.)

1
Eleanor Zimmermann

L'ajout de CSP dans le fichier manifest.json supprime l'erreur. Cela a fonctionné pour mon application de réaction ... Je suppose qu'il manque "," est le problème pour votre code, sinon ajoutez la ligne ci-dessous et essayez ensuite.

"csp": "script-src 'self' 'unsafe-inline'; object-src 'self'"

politique de sécurité du contenu

0
abhijit padhy