Создание расширений к Mozilla Firefox
Мы с вами плавно и незаметно завершаем разговор о создании расширений для второго по популярности в мире браузера Mozilla Firefox. Надеюсь, вы еще не успели окончательно забыть все то, о чем мы говорили в предыдущих статьях на эту тему?
Закончили в прошлый раз на том, каким образом можно опробовать созданное расширение "в боевых условиях", то есть, в браузере. Наверное, на этом можно было бы и завершить разговор о расширениях к Mozilla Firefox, но он тогда получился бы, скажем так, не совсем полным. Почему? Ну, во-первых, в таком виде, в каком оно есть, наше расширение отдавать пользователям ещё нельзя, его нужно "запихнуть" в XPI-пакет. Во-вторых, есть некоторые более сложные аспекты создания расширений, о которых мы с вами пока что не говорили, но которые, тем не менее, вполне заслуживают того, чтобы быть хотя бы вскользь упомянутыми в ходе нашего разговора о создании расширений к Firefox.
Упаковка расширения в XPI-пакет
После того, как расширение создано, его упаковывают в XPI-пакет, который браузер сам потом распаковывает таким образом, чтобы расширение было нормально установлено. Все расширения к браузеру распространяются именно в таком виде, и, в общем-то, вполне понятно почему - так банально удобнее. Но это зависит от разработчика некоторых дополнительных телодвижений - не сказать, впрочем, чтобы сильно напрягающих его.
Как я уже говорил, XPI-пакет представляет собой, по сути, обычный ZIP-архив. Сегодня это уже достаточно распространенная практика - сохранять различную информацию внутрь ZIP-файла. Именно таким образом организованы форматы документов новых версий Microsoft Office, а также некоторых других приложений, например, известной математической среды MathCAD.
Как сделать XPI-пакет из папки, в которой находится ваше расширение? Очень просто. Для этого нужно запаковать её содержимое (не саму папку, а именно то, что в ней, то есть в корневой директории архива, должно содержаться - все дерево папок и файлов, которые лежат уже в папке с расширением) любым доступным вам ZIP-архиватором, хоть WinZIP'ом, хоть тем, который встроен в Total Commander. Можно воспользоваться инструментом Extension Builder (ted.mielczarek.org/code/mozilla/extensiondev), который берет на себя внушительную часть всей черновой работы по созданию пакета расширения.
Получившийся ZIP-архив нужно переименовать таким образом, чтобы он имел расширение XPI, а при загрузке его на сервер установить MIME-тип application/x-xpinstall, чтобы браузер правильно интерпретировал назначение данного пакета.
Собственно, пожалуй, на этом "обязательная программа" разработки расширения для Firefox подходит к концу и начинается программа вольная. Не всегда то, о чем я расскажу ниже, понадобится вам при создании расширений для Firefox, но иметь это все в виду будет весьма и весьма полезно. И, возможно, даже местами интересно.
XPCOM
Когда-то давно тому назад (еще в 2006 году) я уже рассказывал читателям "Компьютерных вестей" о замечательной и очень полезной технологии XPCOM, которая может применяться для создания кросс-платформенных приложений. В свое время эту технологию разработала для своих нужд тогда еще великая и могучая корпорация Netscape, и использовалась она, конечно же, и в браузере, который разрабатывала эта корпорация. Mozilla Firefox, как известно, имеет своим дальним предком именно браузер Netscape Navigator. Поэтому нет ничего удивительного в том, что эта технология сейчас используется и в этом браузере. Используется она, кстати говоря, и в ряде других свободных программных продуктов, например, в широко известном офисном пакете OpenOffice.org. Но сейчас мы, конечно, вспоминаем её вовсе не потому, что она такая хорошая и замечательная и много где используется, а потому, что от неё есть непосредственная польза и нам, разработчикам расширений для браузера Mozilla Firefox. Подробнее об XPCOM можно почитать в уже упоминавшейся статье "Введение в XPCOM" (см. "КВ" №43 за 2006 год) или в книге, посвященной созданию XPCOM-компонентов, на сайте Mozilla (https://developer.mozilla.org/en/Creating_XPCOM_Components). Книга, конечно, полнее, но она на английском.
В расширениях к браузеру могут находиться XPCOM-компоненты, которые можно писать на JavaScript'е или C++. Это очень хорошая новость для тех, кто хочет создать какое-то действительно нестандартное и нетривиальное расширение, функциональность которого нельзя обеспечить средствами обычных XUL-слоев и стандартных элементов управления XUL. Но, правда, нужно приготовиться к тому, что и разработчику будет не слишком просто, потому что разработку XPCOM-компонентов для Firefox'а без опыта вряд ли можно считать легким делом. Впрочем, и пугаться не стоит - как мудро говорится в пословице, смелым сопутствует удача.
Если вдруг вы действительно соберетесь делать свой собственный XPCOM-компонент для включения его в Firefox'овское расширение и выберете для этой цели язык C++, то вам понадобится Gecko SDK, который расположен по следующему адресу: https://developer.mozilla.org/en/Gecko_SDK. Обратите внимание, что для разных версий Mozilla Firefox предлагаются разные версии Gecko SDK, и при этом вам нужно использовать ту, которая соответствует минимальной версии браузера и которую будет поддерживать разрабатываемое вами расширение. Впрочем, думаю, что особенно ударяться в максимальную совместимость не следует, потому что аудитория пользователей браузера Firefox не так инертна, как аудитория того же Internet Explorer'а, а потому все-таки обновляет свой браузер, по крайней мере, с выходом "мажорных" обновлений. Что приятно, SDK есть для всех основных платформ, под которыми сидят пользователи, то есть, Windows, Mac и Linux.
Впрочем, XPCOM - вещь для расширений не обязательная. Чего не скажешь об их отладке. К сожалению, даже чрезвычайно талантливые разработчики редко пишут код, который вообще не нуждается в отладке. Так что отладка - весьма насущный при создании расширений к Firefox вопрос.
Отладка расширений
Отладка расширений сводится, по большому счету, к отладке JavaScript'а, реализующего логику работы расширений. Можно, конечно, говорить как об отладке и о доведении до ума XUL-файлов, описывающих интерфейс расширения, но это все-таки, мне кажется, до неё немного не дотягивает. Отладка XPCOM-компонентов, если они присутствуют в вашем расширении, - вообще отдельный разговор, который сейчас лучше даже не начинать.
На тему отладки JavaScript'а для начала рекомендую посмотреть https://developer.mozilla.org/en/Debugging_JavaScript и https://developer.mozilla.org/en/Debugging_a_XULRunner_Application.
Вам могут пригодиться для этого некоторые дополнительные инструменты. В первую очередь, наверное, DOM Inspector - https://developer.mozilla.org/en/DOM_Inspector. Он позволяет просматривать значения атрибутов, DOM-структуры и др. Вообще, надо сказать, что DOM Inspector будет полезен на всех этапах разработки расширения, в том числе и для того, чтобы увидеть структуру тех областей браузера, которые вы собираетесь расширять собственными XUL-слоями. В старых версиях Firefox этот инструмент шел в стандартном инсталляторе браузера, но сейчас его уже нужно устанавливать отдельно. Другой полезный инструмент называется Venkman, найти его можно по адресу https://developer.mozilla.org/en/Venkman. Он позволяет расставлять в JavaScript'е "брейкпоинты" (точки остановки) и выполнять, таким образом, скрипт ровно до того момента, как в нем что-то пойдет не так.
Не нужно, конечно, забывать и о "детстве" человечества - то есть, о такой простой, но эффективной технике, как "printf debugging", то есть, о банальном ведении лога или выводе сообщений о тех или иных результатах тех или иных действий скрипта на экран. Зачастую вам даже не придется делать никаких более сложных и глубоких шагов: ведь, как известно, понимание того, где скрывается проблема, - уже, как минимум, треть её решения.
В качестве "экстремального" способа отладки в англоязычных статьях по созданию расширений рекомендуют использовать отладочную сборку самого браузера, в которую устанавливать создаваемое расширение. Это уже, кстати, ближе к методам отладки XPCOM-компонентов. Авторы англоязычных статей обещают, что для опытных разработчиков это будет самым простым и быстрым путем для понимания и устранения ошибок. Насколько этот путь подходит вам лично - судить, опять же, только вам.
Так что, как видите, возможностей отладки расширений у разработчика много, нужно только грамотно ими пользоваться.
Резюме
Что ж, пока что все. Вряд ли, конечно, все, кто прочитал все пять статей, кинутся сразу же создавать свое расширение, но, думаю, рассказ был для вас полезен. А те, кто действительно имеет какие-то задумки по поводу улучшения функциональности любимого браузера (которым, конечно же, всенепременно является именно Mozilla Firefox), возможно, получили толчок к реализации своих задумок. В любом случае, если у вас созрели планы по поводу собственного расширения, не стоит откладывать их в долгий ящик, потому что иначе они имеют тенденцию не реализовываться.
Вадим СТАНКЕВИЧ,
[email protected]
Горячие темы