Подтвердить что ты не робот

Политика безопасности контента: невозможно загрузить Google API в расширение Chrome.

Это относительное расширение Chrome. Я пытаюсь простой, который использует API Google Chart API

У меня есть этот код в моем html-документе "popup.html", который загружается при нажатии на значок.

<!doctype html>
<html>
<head>
  <script type="text/javascript" src="js/libs/jquery-1.8.0.min.js"></script>
  <script type="text/javascript" src="js/popup.js"></script>
  <script type="text/javascript" src="http://www.google.com/jsapi?key=xxxxxxxxxxx"></script>

  [...]
</body>
</html>

Получаю следующее сообщение:

Отказался от загрузки script 'http://www.google.com/jsapi?key=xxxxxxxxxxx', поскольку он нарушает следующую директиву политики безопасности контента: "script -src" self "chrome-extension- ресурс:".

Я понял, что это что-то относительно разрешений, я пытался изменить свой файл манифеста, но безуспешно:

{
  [...]
  "manifest_version": 2,
  "permissions": ["http://*.google.com/"],
  "content_security_policy": "script-src 'self' http://www.google.com; object-src 'self'",
}

Любая идея?

4b9b3361

Ответ 1

Просто используйте вместо этого протокол https. Ошибка, которую вы получаете, касается Политика безопасности контента.

См. раздел Relaxing the default policy на странице. В нем упоминается, что вы можете использовать только белый список https, chrome-extension и chrome-extension-resource.

Ответ 2

Я боролся с этой проблемой в течение последних 12 часов и, наконец, получил ее на работу. Почему так долго? Потому что меня несколько раз отбросили с тропы. Во-первых, ложные выводы:

  • "Сделать HTTPS" - не имеет значения. Мое расширение Chrome теперь выполняет обычные HTTP-вызовы в другом домене и отлично работает. (ОБНОВЛЕНИЕ: немного больше разъяснений. Миф "сделать это https" уходит корнями в аналогичную проблему, с которой люди обычно сталкиваются, когда дело доходит до загрузки SCRIPT. Если вам нужно принести внешний .js файл, то да, вы необходимо изменить ваше content_security_policy и включить правильное имя хоста, которое, по-видимому, принимает только https. Имейте в виду, что это отличается от того, как ударить внешнее имя хоста для чего-то вроде служб REST. Как я уже говорил ранее, это не требует изменения content_security_policy, HTTPS.)

  • "Использовать JSONP в ваших вызовах JQuery AJAX" - это может быть способ адресовать междоменный AJAX на обычных веб-страницах, но не требуется в расширении chrome из-за встроенного Content Security Политика. Кроме того, реализация JSONP звучит как PITA, потому что для обработки параметра обратного вызова требуются серверные изменения (или что-то еще, я все еще не уверен). В любом случае, не нужно.

  • "Помешите строку с политикой безопасности контента (CSP) в вашем расширении" - в манифестной версии 2 строка по умолчанию отлично работает: "script -src" self "; object-src" self ", Вам даже не нужно явно указывать его. Вам нужно включить домен, который вы пытаетесь удалить из расширения, в качестве значения" разрешения".

Решение:

Удалите все встроенные javascript из вашего расширения. Внесите его в отдельный .js файл. Я подозреваю, что для большинства html файлов с любым приличным количеством javascript этот процесс будет сосать. К счастью для меня, все, что у меня было, было загруженным телом, которое я смог переместить в отдельный файл js как событие onload.addlistener onload.

Страница, которую вы действительно должны прочитать, чтобы преодолеть эту проблему: https://developer.chrome.com/apps/contentSecurityPolicy

Ответ 3

Я получаю эту ошибку [Отчет], когда запускаю расширение Augury chrome для отладки приложения Angular. Отключите расширение, и ошибка исчезнет. Это не поможет людям, которые пишут расширения, но может помочь тем, кто не пишет.

[Report Only] Refused to load the script 'https://apis.google.com/js/googleapis.proxy.js?onload=startup' because it violates the following Content Security Policy directive: "script-src 'report-sample' 'nonce-EagvF0PX1Z3gVL2Dka1hbA' 'unsafe-inline' 'strict-dynamic' https: http:". 'strict-dynamic' is present, so host-based whitelisting is disabled. Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.