Создание расширения для Chrome. Часть V — Привязка плагина к конкретным сайтам (Шаблоны соответствия).

Мы написали плагин, анимирующий заголовки вкладок всех сайтов. Но зачастую работа плагина нацелена на конкретные страницы, сайты, протоколы. Особенно если речь идет о расширенных пользовательских скриптах. Как я уже сказал, секция манифеста 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

admin

Нужно войти чтобы оставить комментарий.