Скрипт Google Maps API загружается из-за политики безопасности контента

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

Refused to load script from 'https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXX&sensor=false' because of Content-Security-Policy.

Вот мой файл манифеста

{
  "name": "Name",
  "version": "1.0",
  "manifest_version": 2,
  "background": { 
    "scripts": [
      "js/script.js"
    ] 
  },
  "description": "Desc",
  "browser_action": {
    "default_icon": "images/icon.png",
    "default_title": "Title",
    "default_popup": "html/popup.html"
  },
  "permissions": [ 
    "http://*/",
    "http://*.google.com/",
    "http://localhost/*"
  ],
  "content_security_policy": "script-src 'self' http://google.com; object-src 'self'"

}

И я добавляю свои скрипты вот так

<script src="../js/libs/jquery.js"></script>
  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXX&sensor=false"></script>
  <script src="../js/plugins/easing.js"></script>
  <script src="../js/script.js"></script>

Почему я снова и снова получаю эту ошибку? Пожалуйста помоги...

Обновите один

Я добавил эти два разрешения в файл манифеста, но все еще не работает

"https://maps.google.com/*",
"https://maps.googleapis.com/*",

Обновление два

Я также использовал этот вид content_security_policy

"content_security_policy": "default-src 'none'; style-src 'self'; script-src 'self'; connect-src https://maps.googleapis.com; img-src https://maps.google.com"

Но выше у меня тоже не работает




Ответы (3)


Я думаю, что проблема здесь в том, что вы неправильно установили политику безопасности контента для URL-адреса Google Maps. Вы должны изменить свою «content_security_policy» в файле манифеста примерно так:

"content_security_policy": "script-src 'self' https://maps.googleapis.com https://maps.gstatic.com; object-src 'self'"

Это просто означает, что вы разрешаете запускать скрипт с собственной/текущей страницы и с «https://maps.googleapis.com».

Попробуйте это и посмотрите, поможет ли это.

person Syed Ghulam Akbar    schedule 05.11.2012
comment
Спасибо Акбар. Я изменил свой файл манифеста в соответствии с тем, что вы сказали, но теперь я получаю эту ошибку ed to load script from 'https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/19/main.js' because of Content-Security-Policy.. Есть идеи, почему? - person Om3ga; 05.11.2012
comment
Я обновил указанную выше строку политики безопасности контента, включив в нее строку maps.gstatic.com. Я думаю, вам также может понадобиться добавить больше политик релаксации. Для этого я бы рекомендовал пройти через: developer.chrome.com/extensions/contentSecurityPolicy.html dvcs.w3 .org/hg/content-security-policy/raw-file/tip/ - person Syed Ghulam Akbar; 05.11.2012
comment
Спасибо за ответ, есть ли у вас какое-либо решение для загрузки библиотеки внутри страницы в виде скрипта содержимого? Я добавил вопрос здесь - person Mohammad AlBanna; 24.02.2018
comment
Спасибо, но более новые версии Chrome теперь жалуются на загрузку шрифтов с «https:» (ничего больше после этого, только https:), мне пока не удалось найти решение, и я пробовал все варианты на этой странице. Даже с источником шрифта «self» https: * он по-прежнему жалуется на блокировку загрузки «https:» в последних версиях Chrome. - person robvdl; 22.12.2018

У меня была такая же проблема, и я решил ее, заменив URL-адрес API с версии http на версию https.

В HTML из:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?v=3.3&sensor=false'></script>

To:

<script type='text/javascript' src='https://maps-api-ssl.google.com/maps/api/js?v=3.3&sensor=false'></script>

Затем добавил https://maps-api-ssl.google.com в CPS в manifest.json.

Не знаю, нужна ли вам еще эта информация. Но я гуглил и тратил некоторое время, но не мог найти прямого ответа, поэтому я написал здесь, чтобы надеяться, что это кому-нибудь поможет.

person leccmo    schedule 08.04.2014

Политика безопасности контента защищает вас от XSS-атак. Но это означает, что вам необходимо явно внести внешние ресурсы в белый список. Вы можете сделать это, предоставив дополнительные заголовки HTTP или тег <meta>, например:

<meta http-equiv="Content-Security-Policy" 
    content="default-src 'self' data: gap: ws: ; 
    style-src 'self' https: *.googleapis.com; 
    script-src 'self' https: *.googleapis.com;
    media-src 'none'; 
    font-src *;
    connect-src *;
    img-src 'self' data: content: https: *.googleapis.com;"> 
person Muhammad    schedule 11.10.2018
comment
Хотя это может ответить на вопрос авторов, в нем отсутствуют поясняющие слова и ссылки на документацию. Необработанные фрагменты кода не очень полезны без фраз вокруг них. Вы также можете найти очень полезным как написать хороший ответ. Пожалуйста, отредактируйте свой ответ. - person hellow; 11.10.2018