Расширение 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 here]()
GET 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 и выполнил ваш код, он работает нормально.