Устранение ошибки политики безопасности в Chrome

Я пытаюсь сделать расширение chrome для радио потока, но есть проблема. Когда я запускаю свой script в браузере, как обычный JS + HTML + CSS, он работает, но когда я пытаюсь запустить его, как расширение Chrome, я получаю эту ошибку:

Отказано от выполнения inline script, поскольку оно нарушает следующие Политика политики безопасности содержимого: "script -src 'self' chrome-extension-resource:". Либо ключевое слово "небезопасное-встроенное", либо hash ('sha256 -...'), или nonce ('nonce -...') требуется для включения встроенное выполнение.

После этого я добавил это в свой манифест:

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

Но после этого я получал сообщение об ошибке (ошибка в строке манифеста с кодом выше)


Это мой манифест:

{
   "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'"

}

Это основной файл html:

<!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>

Ответы

Ответ 1

Ваши проблемы следующие:

  • Chrome CSP запрещает встроенный код, и это не подлежит переопределению. Ваш 'unsafe-eval' не решает проблему, а 'unsafe-inline', которая помогла бы игнорировать в Chrome.

    Вам нужно избавиться от встроенного кода:

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

    Это нужно перенести в файл js.

  • В вашем manifest.json есть опечатка, вы забыли запятую:

    "version": "1.0",
    

    В общем, использование JSON validator может помочь вам поймать эти ошибки.

Ответ 2

Я знаю, что я немного опаздываю на это, но на основе комментариев OP к ответу Xan другой компонент решения проблемы будет заключаться в том, чтобы настроить вызов AJAX, который подразумевается.

Я получал ту же ошибку и скорректировал свой API-вызов:

dataType: 'json'

вместо:

dataType: 'jsonp'

(решенный вопрос, предоставленный, все равно нужно удалить любые встроенные скрипты.)

Ответ 3

Для меня причина в том, что я использую более старую версию (например, v1.7) jQuery, у которой есть проблемы CSP, выберите новую версию (v2.1.3).