Создание расширений к Mozilla Firefox
Продолжим рассматривать вопросы, связанные с созданием расширений для популярнейшего браузера Mozilla Firefox. И постепенно приблизимся к своей конечной цели - к реально работающему расширению для этого браузера.
Chrome Manifest, начало
В прошлый раз мы остановились на обсуждении Chrome Manifest - важного для каждого расширения файла. Тогда я уже рассказывал, для чего нужны эти манифесты, но сейчас, на всякий случай, напомню, что они добавляют URI нашего расширения в Chrome Registry, делая их, таким образом, доступными для браузера. Именно поэтому важно сформировать Chrome Manifest таким образом, чтобы в нем не содержалось никаких ошибок, потому что в противном случае расширение попросту не сможет правильно интегрироваться в Mozilla Firefox.
Во-первых, о названии. Называться файл должен очень и очень просто - chrome.manifest. Как видите, все логично. Во-вторых, содержание. Файл текстовый, что, собственно, объяснимо, т.к. разработчик должен писать его "руками". Как выглядит его содержимое? В целом формат Chrome Manifest достаточно сложен - вернее, имеет достаточно длинное описание, которое вряд ли целесообразно полностью приводить в данной статье, потому что мы здесь рассматриваем не все мыслимые дополнения к Mozilla Firefox, а только расширения. Поэтому в нашем случае можно ограничиться и следующей немудреной строчкой:
content sample chrome/content/
Как видите, в этой строке есть три элемента. Идущий первым по списку обозначает тип пакета Chrome. Второй есть название самого пакета. Ну, и, наконец, третий элемент - это путь к размещению файлов в пакете Chrome.
Строка, несмотря на свою простоту, содержит сразу несколько неочевидных и достаточно тонких моментов. Каких именно? Ну, во-первых, необходимым условием правильной записи является наличие слэша (/) после пути к файлам. Во-вторых, обратите внимание на регистр символов. Не случайно вся строка записана в нижнем регистре. В документации говорится о том, что записывать в нижнем регистре необходимо только название пакета, да и то для версий Firefox и Thunderbird 2.x, которые не умеют нормально работать со смешанным регистром. И, тем не менее, неспроста, надо думать, во всех примерах все строчки записываются целиком в нижнем регистре. Можно и поэкспериментировать, чтобы узнать реальные возможности использования смешанного или только верхнего регистров символов в Chrome Manifest, но лично мне кажется, что это занятие - напрасная трата времени.
Что же на самом деле записано в рассмотренной выше строке? Фактически, указывается, что файлы пакета sample (непривычно читать название пакета с маленькой буквы?) находятся в подкаталоге chrome/content/ относительно файла Chrome Manifest. Файлы со скинами и с локализациями, соответственно, должны находиться в подкаталогах chrome/skin/ и chrome/locale/.
Более подробную информацию о том, как записываются адреса пакетов и многое другое для файла Chrome Manifest, можно узнать в документе, расположенном по следующему адресу: https://developer.mozilla.org/en/Chrome_Registration. Мы же пока не прощаемся с файлом Chrome Manifest. Потому что дальше гораздо интереснее: мы будем регистрировать созданные для расширения XUL-слои.
Chrome Manifest, продолжение: регистрация
XUL-слоев
В предыдущих частях серии статей о создании расширений для Mozilla Firefox мы подробно говорили о XUL и о слоях, на которые "распадается" интерфейс браузера при ближайшем рассмотрении. Слои, которые включаются в браузер путем установки расширений, должны каким-то образом регистрироваться в Mozilla Firefox, чтобы браузер их затем правильно "подхватывал" и демонстрировал на радость пользователю. Собственно говоря, для этого нужно всего лишь добавить информацию о созданных для вашего расширения XUL-слоях в создаваемый для него же файл Chrome Manifest. И сделать это очень просто.
Слои XUL добавляются в Chrome Manifest строками следующего вида:
overlay chrome://browser/content/browser.xul chrome://sample/content/sample.xul
Как видите, и здесь строка является как бы трехкомпонентной. Но компоненты, конечно, имеют уже несколько иное значение. Первый элемент - обозначение того факта, что данная строка добавляет в интерфейс браузера новый слой. Следующий, второй по счету, это "база" для нового слоя - в данном случае этой "базой" является основное окно браузера. Третий элемент - тот XUL-файл, который планируется добавить в интерфейс данным расширением. Во время загрузки расширения содержимое sample.xul связывается с содержимым browser.xul, и пользователь видит интерфейс браузера с уже установленным в нем расширением.
Ну, хорошо, Chrome Manifest успешно записан. Что дальше? А дальше настало время несколько пристальнее взглянуть на сами расширения как таковые - из чего они вообще состоят, и что туда еще можно добавить.
Расширение как единое целое и его
структура
Возможно, с этого стоило начинать разговор о создании расширений для Mozilla Firefox, но мне кажется, что уместнее посмотреть на расширение для браузера как на единое целое уже сейчас, когда мы знакомы со многими (но далеко не со всеми) частностями.
Напомню, что расширение - это архив, в котором содержатся различные файлы, обеспечивающие его инсталляцию и работу (то есть, XUL-файлы и Manifest'ы, о которых мы уже говорили) и разные вспомогательные файлы, которые также нужны для работы расширения. Как это все выглядит в архиве? XPI-пакет, который и скачивает потом пользователь, может иметь достаточно сложную структуру, но в простейшем случае структура нашего архива будет выглядеть следующим образом:
/install.rdf /components/* /components/cmdline.js /defaults/ /defaults/preferences/*.js /plugins/* /chrome.manifest /chrome/icons/default/* /chrome/ /chrome/content/
Фактически, то, что непосредственно отвечает за работу вашего расширения, - а это XUL-файлы и различные сопутствующие им скрипты - находится в поддиректории /chrome/content/. Соответственно, в эту папку при разработке расширения их и нужно складывать. Конечно, реальные расширения, выполняющие какую-то более-менее полезную с точки зрения пользователя работу, имеют более сложную внутреннюю структуру в силу собственной архитектурной сложности. Впрочем, мы об этом еще будем говорить немного позже, возможно, в одном из следующих выпусков "Компьютерных вестей".
Тем не менее, это вовсе не означает, что вам нужно будет самостоятельно создавать все эти папки, следить за правильностью названий и потом запаковывать все это в ZIP-архив (который и является XPI-расширением). Сгенерировать "костяк" своего будущего расширения можно с использованием чрезвычайно простого и удобного онлайн-мастера под названием Firefox/Thunderbird Extension Wizard, расположенного по адресу: ted.mielczarek.org/code/mozilla/extensionwiz. В нем вы сразу создаете "болванку", в которой содержится не только иерархия папок, но и информация о названии и версии вашего расширения, сведения о поддерживаемых версиях Mozilla Firefox и Thunderbird и даже кое-какая лицензионная информация.
Конечно, если больше нравится создавать все вручную и упаковывать WinRAR'ом, то никто вам, конечно, этого не запретит. Но, на мой взгляд, разумнее быстро сгенерировать "болванку" расширения, а освободившееся за счет такой нехилой операции время потратить на изучение чего-нибудь "продвинутого" в смысле разработки расширений.
Первое тестирование расширения
Коль скоро у нас есть сгенерированное мастером или созданное своими руками расширение, в которое мы уже что-то добавили посредством новых XUL-слоев, то можно развлечься его тестовым запуском. Возникает вполне резонный вопрос: что же для этого нужно? Оказывается, не так уж и много - достаточно немного настроить Firefox, который должен "увидеть" и "подхватить" расширение.
В каталоге с профилем Firefox (он "лежит" в Documents and Settings, ну а если вы под Linux'ом, то наверняка сами без труда найдете, где у вас профиль Firefox) нужно найти подкаталог Extensions. Если его каким-то чудом не существует, нужно создать такой подкаталог заново. Далее в нем создается пустой текстовый файл с названием, в точности повторяющим идентификатор вашего расширения (sample@example.net или что-то в том же духе). После этого в данный файл нужно записать полный путь к каталогу с вашим расширением. Путь этот, обратите внимание, обязательно должен заканчиваться слэшем (или, в случае Windows, обратным слэшем) и не должен содержать у себя в конце никаких лишних пробелов, табуляций или каких-то других символов-"невидимок". Путь, который вы указываете, должен вести не к XPI-архиву, а к "распакованному" расширению.
После этих всех нехитрых манипуляций останется только перезагрузить браузер, если вдруг в этот момент он у вас был открыт. При следующей загрузке Firefox, если все сделано корректно, созданное расширение уже будет работать в браузере.
На этой мажорной ноте пока что и остановимся. Мы еще не завершаем наш разговор о расширениях к Firefox, и, надеюсь, вы не успеете забыть все то, о чем мы говорили, до выхода следующего номера "Компьютерных вестей".
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by