Мы написали плагин, анимирующий заголовки вкладок всех сайтов. Но зачастую работа плагина нацелена на конкретные страницы, сайты, протоколы. Особенно если речь идет о расширенных пользовательских скриптах. Как я уже сказал, секция манифеста content_scripts содержит объекты, или, как их еще называют, «части» одной из опций которых является параметр matches. Этот параметр дословно переводиться как «соответствия», и именно в нем прописывается, каким страницам «соответствует» перечень файлов указанных в параметре js (и не только, есть еще дополнительные опции с перечнем файлов других типов, но об этом ниже). Я также говорил, что эти соответствия являются особым родом регулярных выражений. Особым, так как они подчиняются своим собственным правилам, о которых я хочу сейчас рассказать. По факту мое повествование будет вольным переводом официального источника [1].
И так, каждое соответствие, указанное в опции mstches, имеет название Шаблон соответствия (Matches pattern). Сама опция является массивом, поэтому вы можете указать через запятую несколько шаблонов соответствия в одной опции. Каждый шаблон соответствия должен быть заключен в кавычки. Также стоит рассказать, что наряду с опцией matches в каждой части может присутствовать опция exclude_matches, в которой описываются соответствия с адресами, которые ваш плагин должен игнорировать (например, не выполнять указанные в опции js файлы).
Каждый шаблон соответствия состоит из трех частей: Схема, Хост и Путь. Они складываются в шаблон следующим образом:
<схема>://<хост><путь>
Схема символизирует описание протокола в адресе и может принимать определенный список значений: http, https, file, ftp, chrome-extension и *. Символ звездочки указывает на то, что шаблон будет соответствовать всем перечисленным протоколам до звёздочки.
Хост, более сложная структура и может иметь один из трех видов:
— *, что описывает любой хост. Например, www.google.com, google.com, sargaev.ru.
— *.<Любые символы, исключая «*» и «/» >. Например часть шаблона *.sargaev.ru будет соответствовать адресам содержащим: www.sargaev.ru, docs.sargaev.ru, sargaev.ru и тому подобное.
— В случае если схема указана как file, хост в шаблоне не прописывается.
Путь в шаблоне должен иметь вид «/<Любые символы, в том числе могут быть «*» и «/»>». При этом символ звездочки заменяет любое количество любых символов, а знак «/» является неотъемлемой частью адреса. Например, часть шаблона «/chrome*/match_patterns.html» будет соответствовать адресам содержащим такие пути: «/chrome/extensions/match_patterns.html», «/chrome/match_patterns.html», «/chrome/doc/extensions/match_patterns.html» и тому подобное.
Шаблон соответствия может принять и отличное от описанного значение <all_urls>, что будет соответствовать абсолютно всем адресам и всем страницам, открываемым в браузере. Знаки «больше» и «меньше», неотъемлемые символы данного шаблона.
Для наглядности приведем несколько примеров
Шаблон | Что он делает | Пример соответствующих адресов |
http://*/* | Соответствует любым адресам использующим схему http | http://www.google.com/
http://example.org/foo/bar.html |
http://*/foo* | Соответствует любым адресам использующим схему http и чей путь произвольной длины начинается с /foo | http://example.com/foo/bar.html
http://www.google.com/foo |
https://*.google.com/foo*bar | Соответствует адресам со схемой https, указывающим на хост google.com (так же как и на www.google.com, docs.google.com, или google.com), и содержащим путь произвольной длины начинающийся с /foo и заканчивающийся на bar | http://www.google.com/foo/baz/bar
http://docs.google.com/foobar |
http://example.org/foo/bar.html | Соответствует конкретному адресу | http://example.org/foo/bar.html |
file:///foo* | Соответствует адресу любого локального файла, путь к которому начинается с /foo | file:///foo/bar.html file:///foo |
http://127.0.0.1/* | Соответствует всем адресам хоста 127.0.0.1 использующим схему http | http://127.0.0.1/
http://127.0.0.1/foo/bar.html |
*://mail.google.com/* | Соответствует всем адресам хоста mail.google.com использующим любые схемы и произвольны пути | http://mail.google.com/foo/baz/bar
https://mail.google.com/foobar |
chrome-extension://*/* | Соответствует адресам установленных расширений и плагинов. Первую символ * можно заменить на уникальный буквенный код плагина, вторая * заменяет путь внутри каталога плагина. | chrome-extension://askla…asdf/options.html |
<all_urls> | Соответствует абсолютно любым адресам | http://example.org/foo/bar.html file:///bar/baz.html |
И в довершении темы «Шаблонов соответствия» примеры неправильных шаблонов:
Плохой шаблон | Почему он плохой |
http://www.google.com | Нет пути |
http://*foo/bar | За символом ‘*’ в хосте должны следовать либо ‘.’ либо ‘/’ |
http://foo.*.bar/baz | Звёздочка в хосте должна быть первым символом |
http:/bar | Отсутствует разделитель схемы (Вместо “/” должно быть “//”) |
foo://* | Неправильная схема |
В данных шаблонах поддерживаются не все существующие схемы (протоколы)
Привязка плагина к конкретным сайтам. Пример
Вооружившись теорией построения шаблонов соответствия привяжем наш плагин к конкретному сайту. Я буду привязывать его к своему http://macrodmin.ru. Причем, привязывать его буду не на все страницы сайта, а только на страницы статей. Их особенность заключается в том, что путь в адресе начинается с такой последовательности символов «?p=». Изменим файл манифеста:
{
"content_scripts": [
{
"matches": ["http://*.macrodmin.ru/?p=*"],
"js": ["first.js"],
"run_at":"document_end"
}
],
"icons": {
"128": "i128.png",
"48":"i48.png"
},
"description": "Мой первый плагин для Chrome",
"name": "My Plagin",
"version": "1.1.5",
"update_url": "http://macrodmin.ru/download/myplagin_update.xml"
}
Перезагрузим наше распакованное расширение и проверим его работоспособность, кликая по разделам сайта и заходя внутрь статей. Все работает. Теперь плагин можно упаковать (не забываем про сохраненный до этого файл ключей с расширением .pem). Выкладываем упакованный плагин с уникальным именем в Ваше интернет-хранилище. Также нужно поменять значение версии и прописать новый адрес файла в myplagin_update.xml. Это замечательный способ проверить работоспособность системы обновления. Правда придется немного подождать или даже перезапустить браузер. Помните, что браузер обновляет плагины автоматически по своему собственному расписанию.
Продолжение следует…
Список источников:
1 — http://code.google.com/chrome/extensions/getstarted.html