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

Chrome Extension "Отказано в загрузке script, поскольку оно нарушает следующую директиву политики безопасности контента"

Я пытаюсь создать расширение Chrome, но ни один из моих JS не работает. Консоль показывает эту ошибку:

Отказался от загрузки script'https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js' потому что он нарушает следующую директиву политики безопасности контента: "script -src 'self' blob: файловая система: chrome-extension-resource:".

Почему это блокирует запуск jQuery?

4b9b3361

Ответ 1

Как объяснено на веб-сайте Chome, существует политика безопасности содержимого, запрещающая вашему сценарию загружать удаленный сценарий:

Упрощенное определение политики, позволяющее загружать ресурсы скрипта с сайта example.com по HTTPS, может выглядеть следующим образом:

"content_security_policy": "script-src 'self' https://example.com; object-src 'self'"

Так что в вашем случае файл manifest.json должен содержать:

 {
  "name": "My Extension",
  "manifest_version": 2,
  "background":{
     "scripts": [...]
  },
  "content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
 }

Ответ 2

Разрешено ли это в вашем манифестном файле JSON. Что-то вроде этого:

manifest.json

 {
   "name": "My Extension",
   "content_scripts": [{
     "js": ["jquery.min.js", "YourJavaScriptFile.js"],
     "matches": ["http://*/*", "https://*/*"]
   }]
 }

Есть обязательные поля, которые я забыл, но просто даю основную идею.

Ответ 3

ну, вы не можете использовать CDN для js, вам нужно будет скопировать содержимое " https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js " и создать новый файл. внутри вашего каталога js и назовите его jquery.min.js и вставьте в него все, затем в заголовке вашего HTML файла удалите строку, содержащую этот URL, и используйте вместо этого

<script src="js/jquery.min.js"></script>

но убедитесь, что это путь записи для файла, который содержит все данные в указанном URL

веселит,

Ответ 4

Политика безопасности контента - это еще один уровень безопасности для вашего приложения. Это позволяет вам определить все источники, из которых вы загружаете любые стили, сценарии или данные. Для каждого стиля, сценария, шрифта или соединения необходимо указать домены, которые вы загружаете в своем приложении. Если вы используете CDN jQuery другого домена, вам необходимо указать этот домен в Политике безопасности контента.

Если вам не нужен этот дополнительный уровень безопасности и вы хотите загружать стили или скрипты из любого домена, который вам нужен, просто добавьте следующий метатег в ваш index.html и убедитесь, что он находится перед любым вашим импортом.

<meta http-equiv="Content-Security-Policy" content="default-src *;">

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

Ответ 5

Я расскажу вам короткую историю. В Google Chrome есть CSP (Политика безопасности контента), что означает, что в расширениях Chrome внешний сценарий запрещен. Если вы используете vue cdn, просто выполните следующие шаги, и все готово.

  • Добавьте следующий код в файл manifest.json и измените имена файлов в соответствии с необходимостью. Здесь "unsafe-eval" - это то, что вы ищете, просто добавьте это.
{
    "manifest_version": 2,
    "name"            : "Hello Extension",
    "version"         : "1.0",
    "permissions": [
        "https://cdn.jsdelivr.net/npm/vue/dist/vue.js"
    ],
    "background": {
        "scripts": ["popup.js"],
        "persistent": false
      },
    "description"     : "Testing the hello world extension",
    "icons": {
        "16"    : "icons16.png",
        "48"    : "icons16.png",
        "128"   : "icons16.png"
    },
    "browser_action": {
        "default_icon"   : "icons16.png",
        "default_popup" : "popup.html"
    },
    "content_security_policy": "script-src 'self' 'unsafe-eval' https://cdn.jsdelivr.net; object-src 'self'"
}
  • В ваш external js сюда popup.js добавьте код Vue, и все будет отлично работать.
var app = new Vue({
    el: "#app",
    data: {
        name: ""
    }
});

Ответ 6

Мой HTML файл имел <script> some js code within it </script>. При удалении тегов script ошибка исчезла.

Ответ 7

Согласно документации расширения Chrome, вам необходимо загрузить копию внешнего ресурса в папку вашего пакета и загрузить скрипт локально.

Загрузка внешних скриптов не допускается.