Создание расширений к Mozilla Firefox
Вы наверняка наслышаны о расширениях к Mozilla Firefox, даже если сами предпочитаете пользоваться каким-либо другим браузером. Но знаете ли вы, как создавать эти самые расширения? Нет? А хотите узнать? Тогда эта статья поможет вам войти в мир разработчиков расширений для второго по популярности в мире браузера.
А зачем нам эти расширения?
Вопрос о том, почему возникает необходимость в создании новых расширений в то время, как в Сети можно найти уже не одну тысячу готовых, оставим на совести того, кто его задает. Во всяком случае, думаю, что у многих наших читателей наверняка возникали идеи по поводу какой-нибудь функциональности, которой просто позарез не хватает "Огненному лису" и которая по какой-то причине реализована в уже существующих дополнениях не совсем в таком виде, как хотелось бы. В общем, если есть идея, то вполне можно заняться её реализацией. Если же идеи нет, то, конечно, лучше подождать, пока она возникнет, потому что любой софт, не нужный даже собственному разработчику, практически со 100% вероятностью обречен на прозябание в безвестности. Нет, конечно же, бывают и исключения, и идея может придти в голову не вам, а, скажем, кому-то из ваших родственников, коллег, друзей или даже просто знакомых. Но, в любом случае, у любой работы должна быть цель - если только вы не хотите написать расширение просто ради того, чтобы написать расширение.
В общем, с "идеологической" частью, думаю, можно закончить и перейти к части технической - то есть, к рассказу о том, как создаются расширения для Mozilla Firefox.
Анатомия расширения
Первое, что стоит себе уяснить - что расширение для Firefox отличается от привычного для большинства разработчиков понимания плагинов для какой-либо программы. Дело в том, что расширение для Firefox, в отличие от плагинов к тем же Total Commander или Adobe Photoshop, не является отдельным исполняемым файлом, в котором реализованы экспортируемые функции специфического вида, которые и используются основным приложением. Что, в общем-то, и понятно, потому что Firefox - программа кросс-платформенная, а за все хорошее в нашем несовершенном мире приходится платить.
Так вот, из чего же состоит расширение для Firefox? Обратимся к полуофициальным источникам (wiki на mozilla-russia.org). В них говорится дословно следующее: "Расширение состоит из 5 частей:
- RDF-описания файлов, содержащихся в расширении
- Скрипты (обязательным является скрипт, инсталлирующий расширение в браузер)
- XUL-файлы - описание интерфейса расширения
- Локализация - опционально
- Скины (картинки, содержащиеся в расширении) - опционально"
Все это для удобства упаковывается в XPI-файл (по сути, обычный ZIP-архив), который потом уже отдается на растерзание конечным пользователям свежеиспеченного расширения.
Собственно, всю работу над расширением для Mozilla Firefox (помимо рассмотренного нами выше этапа "обдумывания" этого расширения) можно разделить на две части: программирование на JavaScript'е (написание скриптов, которые будут реализовывать логику работы расширения) и написание всех сопутствующих файлов, которые помогут вашему расширению органично вписаться в среду браузера. Несмотря на то, что на первое место я сейчас поставил программирование, начнем мы со второй части. Почему? Потому что это совершенно не зависящая от программирования работа, которая, тем не менее, требует много внимания со стороны разработчика. Кроме того, если вы правильно напишете код на JavaScript'е, но неправильно оформите сопутствующие файлы, польза от такого расширения все равно будет нулевая. Даже, напротив, оно может начисто "положить" браузер, отбив у пользователя охоту скачивать и устанавливать расширения на долгие годы вперед.
Что ж, вдохновившись таким суровым предупреждением, вполне можно начать знакомиться с премудростями наполнения XPI-архива содержимым. И начнем, конечно, по порядку, то есть, с создания RDF-файлов, которые идут пунктом номер один в приведенном выше списке составляющих браузерного расширения.
Что есть RDF'ы
В общем-то, если не углубляться в подробности, то с точки зрения разработчика расширений для "Огненного лиса", RDF-файлы - это, в общем-то, те же самые XML'и, только записанные специфическим образом и содержащие специфические данные в специфическом же формате. Если вас подробности по поводу RDF как формата не интересуют, вы можете без какого-либо ущерба для себя пропустить этот раздел статьи.
На самом деле, если все-таки немного углубиться, то окажется, что на самом-то деле RDF можно рассматривать едва ли не как полный антипод XML'а. Дело в том, что аббревиатура RDF расшифровывается как Resource Description Framework (по-русски это обычно записывают как "система описания ресурсов"). Как говорится по поводу RDF в одном из официальных руководств по нему, "RDF - это универсальный способ разложения любых знаний на маленькие кусочки. Он задаёт определённые правила касательно семантики, т.е. смысла этих кусочков. Идея состоит в том, чтобы одним простым способом можно было описать любой факт, притом в таком структурированном виде, чтобы его могли обрабатывать компьютерные программы". Фактически, RDF задуман как более продвинутая замена XML, способная обеспечить расширенные возможности работы с данными. Дело в том, что XML, прекрасно подходящий для записи каких-либо утверждений, весьма затрудняет их семантический анализ в силу как раз богатых возможностей записи и неоднозначных вариантов записи одной и той же информации с помощью различных тегов. Хрестоматийный пример - следующая запись:
<car color="red"/> <car><color>red</color></car> <car color="#cc"/><color id="cc" shade="red"/>
Вот именно для устранения таких неоднозначностей, для более простой автоматизированной обработки данных и для установления связей между различными данными в документе и был придуман такой формат, как RDF.
Почему же тогда я выше написал, что с точки зрения разработчика расширений, разница между XML и RDF исчезающе мала? Дело в том, что RDF - достаточно гибкая технология, сумевшая приспособить под свои задачи даже не вполне совершенный, с точки зрения работы с данными, XML. Именно поэтому RDF-документы можно записывать в виде специфических XML-документов (в чем именно состоит специфика, думаю, будет вполне понятно из примера RDF-файла для Firefox, который мы ещё разберем в ходе нашего дальнейшего разговора о написании расширений для этого замечательного браузера).
Остается, впрочем, только догадываться, зачем разработчики Mozilla Firefox выбрали именно RDF в качестве средства представления информации о расширениях для своего браузера. Возможно, это сделано с расчетом пропаганды этого формата, а возможно, специфический XML действительно меньше подходил под требования разработчиков браузера. Но, в общем, как бы там ни было, сегодня мы имеем именно то, что, собственно говоря, имеем, то есть, разрабатывая расширения для Mozilla Firefox, мы должны иметь дело с RDF, и от этого никуда не уйдешь.
Кстати говоря, если вас заинтересовала тема RDF и вы хотели бы глубже разобраться в отличиях между RDF и XML, могу порекомендовать статью Владимира Шрайбмана "Выражение семантики данных. RDF против XML" (www.citforum.ru/internet/xml/rdf_xml).
Install.rdf
Первый RDF-файл, с которым придется столкнуться любому, кто затеял разработку собственного расширения для Firefox, - это Install Manifest, или, если проще, Install.rdf. Думаю, что из самого названия этого файла понятно, что он нужен для установки расширения в браузер. Именно благодаря ему браузер узнает, совместимо ли расширение с его версией, как обновлять это расширение и т.п.
Выглядит этот файл как показано в листинге. Конечно, это только общая схема, которой нужно придерживаться разработчику, и дальше мы более подробно рассмотрим, что именно нужно писать в этом файле.
<?xml version="1.0"?> <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <!- properties -> </Description> </RDF>
Как видите, вся "соль" этого файла в загадочном комментарии "properties", который стоит в нем ровно посередине. Что же за загадочные свойства описываются в инсталляционном RDF-файле? Собственно говоря, никакой загадки здесь нет, и полный список свойств, которые могут содержаться в Install.rdf, можно обнаружить по следующему адресу: https://developer.mozilla.org/en/Install_Manifests. Все свойства подразделяются на два типа: обязательные и опциональные. Первые, соответственно, просто обязаны по своей природе присутствовать в Install.rdf, ну а вторые, сами понимаете, появляются там в зависимости от пожеланий и прихотей разработчика. Первых, конечно же, меньше, чем вторых, и все они довольно просты по своей сути.
В общем-то, только необходимые свойства в RDF-файле мы с вами и разберем, потому что разбирать все возможные свойства вряд ли имеет смысл. Но сделаем мы это уже не сейчас, а в одном из следующих номеров "Компьютерных вестей" - сами понимаете, газетная статья имеет естественные ограничения в своём объеме, и, к сожалению, эти ограничения заставляют меня принести свои извинения и пообещать перенести рассказ о создании расширений для Firefox на более позднее время. Надеюсь, в вас еще не перегорит энтузиазм к созданию расширений для "Огненного лиса".
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by