Расширение Chrome "Matches" - PullRequest
39 голосов
/ 05 мая 2010

Я пробую свои силы в простом расширении 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]'.

Ответы [ 6 ]

56 голосов
/ 05 мая 2010

Вам необходимо заключить значение поля content_scripts в квадратные скобки:

"content_scripts": [ {
  "matches": ["http://*"],
  "js": ["scripts.js"]
} ]

(см. Chrome Docs для получения дополнительной информации)

Между прочим, использование http://*/* было бы лучшим соответствием для всех URL (см. документы ), добавив https://*/*, если вам также необходимо сопоставить их.

Edit:

После вашего редактирования вы получаете ошибку из-за неправильного шаблона совпадения.

45 голосов
/ 27 октября 2010

Если вы хотите соответствовать каждому URL, то Google имеет специальный шаблон для этой цели: <all_urls>

Пример использования:

"matches": ["<all_urls>"],

Смотрите эту страницу для получения дополнительной информации: https://developer.chrome.com/extensions/match_patterns

2 голосов
/ 21 сентября 2018

Любой шаблон соответствия должен иметь следующую структуру [схема] : // [хост] [путь]

  1. схема это '*' | 'http' | 'https' | 'файл' | 'FTP'
  2. host is '' | '. (любой символ кроме '/' и '*') +
  3. путь равен '/' (любые символы)

Для сопоставления любого HTTP / S и ФАЙЛА URL используйте:

 "matches": [
    "*://*/*",
    "file://*/*"
  ],

Ссылка: https://developer.chrome.com/apps/match_patterns

Кстати, чтобы разрешить доступ к локальным файлам - добавьте разрешение:

"permissions": [
   "file://*/*"
]

Или подтвердить доступ к файлу на странице настроек расширения.

2 голосов
/ 08 января 2016

Для многих, которые получают ошибки, связанные с:

'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 - это файл в каталоге моего проекта, и вы должны заменить его любым файлом скрипта, который вам нужен.

0 голосов
/ 08 мая 2018

"manifest_version": 2

Да, это обязательно ..

0 голосов
/ 19 марта 2018

Бро ты забыл добавить

"manifest_version": 2

Что является обязательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...