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

Расширение манифеста 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]'.

4b9b3361

Ответ 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 файлом, который вы хотите.