Политика безопасности контента: невозможно загрузить 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'",
}
Любая идея?
Ответы
Ответ 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.