Расширение Google Chrome - Script Инъекции

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

manifest.json

"name": "My Chrome Extension",
"version": "1.0",
"manifest_version": 2,
"content_scripts": [{
    "matches": ["http://pagetoinject/script/into/*"],
    "js": ["contentscript.js"]
}]  

contenscript.js:

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
(document.head||document.documentElement).appendChild(s);
s.parentNode.removeChild(s);

(также попробовал этот метод безуспешно.)

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

Я продолжаю получать эту ошибку JavaScript. Здесь скриншот.

enter image description hereGET chrome-extension://invalid/(anonymous function)

Ответ 1

  • В вашем файле манифеста указан "manifest_version": 2. Это автоматически активирует более строгий режим, в котором все файлы расширений недоступны для веб-страниц по умолчанию.
  • Ваш исходный код никогда не будет работать, потому что элемент <script> сразу же удаляется после инъекции (файл script не имеет возможности загрузить).

В результате 1. на консоли появляется следующая ошибка:

Failed to load resource                             chrome-extension://invalid/

Чтобы устранить проблему, добавьте script.js в белый список "web_accessible_resources" в свой manifest file:

<Предварительно > { "name": "Расширение Chrome", "версия": "1.0", "manifest_version" : 2, "content_scripts": [{      "matches": [ "http://pagetoinject/ script/in/*" ],      "js": [ "contentscript.js" ] }] <Ь > , "web_accessible_resources" : [ "script.js" ] }

Ответ 2

В дополнение к вышеприведенным ответам я заметил, что в вашем contentscript.js вы просто добавляете еще один script i.e script.js Почему бы вам прямо не добавить script.js через content_scripts в manifest.json.

Ответ 3

Другой причиной получения этой ошибки является блокировка URL-адреса CORS. Проверьте заголовок сетевого запроса на странице, чтобы увидеть, содержит ли он Content-Security-Policy:

Content-Security-Policy: default-src 'self' http://example.com; connect-src http://example.com/; script-src http://example.com/

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

chrome-extension://mjcbjlencnokpknflpneebajalcnnifo/images/pattern.jpg

Одним из способов решения этой проблемы является использование URI данных изображения:

data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7

Ответ 4

Проблема заключается в том, что вы используете manifest_version : 2. Если вы сделаете это manifest-version: 1, у вас не возникнут проблемы. Версия 2 ограничивает многие такие функции для повышения безопасности. Обратитесь Политика конфиденциальности Google для получения более подробной информации об ограничениях, введенных в манифестной версии 2. Я не мог найти ваш конкретный случай, упомянутый в CSP, но когда я изменил версию манифеста на 1 и выполнил ваш код, он работает нормально.