Расширение манифеста Chrome "Матчи"
Я пытаюсь разобраться с простым расширением Chrome, но у меня проблема с предоставлением значения для массива matches
в моем content_scripts
.
{
"name": "My Extension",
"version": "1.0",
"description": "My Extension Experiment",
"browser_action": {
"default_icon": "icon.png",
"default_title": "Ext",
"default_popup": "popup.html"
},
"content_scripts": {
"matches": ["http://*"],
"js": ["scripts.js"]
}
}
Когда я пытаюсь загрузить это расширение в Chrome, я получаю следующее сообщение:
Не удалось загрузить расширение из "C:\Users\foo\Desktop\Extensions\bar".
Недопустимое значение для" content_scripts".
Я не вижу, что такое "недопустимое" значение. То, что я пытаюсь сделать, соответствует каждому URL-адресу, поэтому мое расширение может манипулировать DOM (через javascript внутри scripts.js
) любой страницы, на которой он запущен. Я что-то пропустил, все об этом не так, или что?
Обновление
После публикации этого вопроса я заметил, что пример Google немного отличается от моего, поэтому я немного изменил свой код, чтобы отразить их синтаксис:
"content_scripts": [{
"matches": ["http://*"],
"js": ["scripts.js"]
}]
При попытке загрузки моего расширения я все равно получаю следующую ошибку:
Не удалось загрузить расширение из "C:\Users\foo\Desktop\Extensions\bar".
Недопустимое значение для 'content_scripts [0].matches [0]'.
Ответы
Ответ 1
Вам нужно окружить значение поля content_scripts
в квадратных скобках:
"content_scripts": [ {
"matches": ["http://*"],
"js": ["scripts.js"]
} ]
(см. Документы Chrome для получения дополнительной информации)
Кстати, использование http://*/*
было бы лучшим совпадением для всех URL-адресов (см. docs), добавив https://*/*
, если вам также понадобится чтобы соответствовать этим.
Edit:
После вашего редактирования ошибка, которую вы получаете, связана с неправильным шаблоном соответствия.
Ответ 2
Если вы хотите сопоставить каждый URL-адрес, Google имеет специальный шаблон для этой цели: <all_urls>
Использование образца:
"matches": ["<all_urls>"],
См. эту страницу для получения дополнительной информации:
https://developer.chrome.com/extensions/match_patterns
Ответ 3
Для многих, которые получают ошибки, связанные с:
'content_scripts[0].matches' is missing or invalid.
или
'content_scripts[0].matches[0]': Empty path.
Попытка заполнить или создать поле совпадений с вашим конкретным URL-адресом.
Если вы хотите использовать все URL-адреса, используйте тег <all_urls>
, как показано ниже.
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": [ "jquery.js" ]
}
]
Файлы, перечисленные в массиве "js", имеют свой путь относительно вашего приложения.
Другими словами, расположение "manifest.json" - это ваш корневой каталог.
Примечание. jquery.js - это файл в каталоге проекта, и вы должны заменить его любым script файлом, который вы хотите.