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>
Vos problèmes sont les suivants:
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.
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.
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).
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.)
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'"