Разработка дополнений FireFox: различия между версиями

Материал из Викиверситета
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 1: Строка 1:
{{Нет категорий}}

<center>Семинар '''''«Разработка дополнений FireFox»''' является частью обучающих материалов [[Веб-технологии|кафедры веб-технологий]].''</center>
<center>Семинар '''''«Разработка дополнений FireFox»''' является частью обучающих материалов [[Веб-технологии|кафедры веб-технологий]].''</center>


Строка 114: Строка 112:
* [https://developer.mozilla.org/en/Setting_up_extension_development_environment#Development_preferences MDN/Setting up extension development environment] {{ref-en}}
* [https://developer.mozilla.org/en/Setting_up_extension_development_environment#Development_preferences MDN/Setting up extension development environment] {{ref-en}}
* [https://addons.mozilla.org/ru/developers/docs/how-to/getting-started Центр разработчиков дополнений/Начало работы] {{ref-ru}}
* [https://addons.mozilla.org/ru/developers/docs/how-to/getting-started Центр разработчиков дополнений/Начало работы] {{ref-ru}}

[[Категория:Веб-технологии]]

Версия от 16:22, 26 августа 2011

Семинар «Разработка дополнений FireFox» является частью обучающих материалов кафедры веб-технологий.

Дополнения к FireFox распространяются в виде файлов с расширением xpi. Эти файлы являются zip-архивами. Внутри архива могут находиться javascript, xul, css-файлы и даже jar-архивы. В большинстве случаев файлы структурированы в диретории и эти директории имеют стандартные названия. В-общем, всё довольно человекопонятно и человекодоступно. Давайте попробуем создать простое расширение. Пусть это будет кнопка, которую мы могли бы разместить на произвольной панели инструментов FireFox и по нажатию на неё должно появляться всплывающее окно.

Но мы не будем делать так, как делается в большинстве подобных руководств: сначала сделать описание файлов, а потом дать ссылку на архив. Мы сначала настроимся на работу, скачаем и установим шаблонный проект, а уже потом будем разбираться что там к чему.

Подготовка рабочего пространства

Итак, для начала создадим отдельный FireFox профиль, который не жалко сломать. Для этого закрываем FireFox, нажимаем Win+R и вводим команду

firefox -P

Откроется окно для выбора профиля. Нажимаем кнопку создания профиля и указываем папку для создания нового профиля. Предпочтительно создать папку так, чтобы она была легко доступна, например:

D:\my_experiments\firefox

Далее скачиваем и устанавливаем шаблонный проект helloworld.xpi. На панели управления должна появиться кнопка, по нажатию которой отображается приветствие 'Hello, World!'.

После установки внутри директории

D:\my_experiments\firefox\extensions

появится папка с названием

helloworld@ru.wikiversity.org.xpi

с ней-то мы и будем работать в дальнейшем.

Содержимое пакета helloworld.xpi

content\overlay.xul

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://helloworld/skin/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://helloworld/locale/overlay.dtd">
<overlay id="helloworld-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <toolbarpalette  id="BrowserToolbarPalette">
        <toolbarbutton  id="helloButton" label="&helloworld;" oncommand="alert('Hello, World!');"/>
    </toolbarpalette>
</overlay>

Это корневой файл, он говорит, что кнопка вообще должна быть и должна быть добавлена по умолчанию на панель инструментов BrowserToolbarPalette. Этот код написан на языке XUL.

locale\en-US\overlay.dtd

<!ENTITY helloworld "Hello World!">

Это просто справочник текстовых констант.

skin\...

В этой папке содержатся изображение для кнопки и файл со стилями

chrome.manifest

content	helloworld	content/
overlay	chrome://browser/content/browser.xul	chrome://helloworld/content/overlay.xul

locale	helloworld	en-US	locale/en-US/

skin	helloworld	classic/1.0	skin/
style	chrome://global/content/customizeToolbar.xul	chrome://helloworld/skin/overlay.css

Очевидно, что это важный файл, который конфигурирует работу приложения. Пока неясно, как надо его интерпретировать.

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">
  
    <em:id>helloworld@ru.wikiversity.org</em:id>
    <em:name>Hello World extension for Firefox</em:name>
    <em:version>1.0</em:version>
    <em:description>Demo Hello World extension.</em:description>
    <em:creator>Wikiversity student</em:creator>
    <em:unpack>true</em:unpack> <!-- чтобы архив распаковался при установке -->

    <!-- Firefox -->
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>3.6</em:minVersion>
        <em:maxVersion>8.0.*</em:maxVersion>
      </Description>
    </em:targetApplication>

  </Description>
</RDF>

В соответствии с этим файлом происходит установка дополнения (или не происходит в случае слишком старых или слишком новых версий).

Инструменты

Для разработки потребуется программистский текстовый редактор. Чтобы изменения содержимого файлов вступили в силу, требуется перегружать FireFox. Это неудобно, т.к. перегружать приходится часто. Поэтому нужно установить дополнение Extension Developer. После установки на панель управления FF нужно вытащить кнопку 'Reload all Chrome'.

Процесс разработки будет выглядеть так: редактируем файлы в текстовом редакторе, сохраняем, жмём на 'Reload all Chrome', проверяем.

Текущие исследования

Внутри XUL могут быть использованы компоненты XPCOM. Для того, чтобы разрабатывать библиотеки XPCOM нужно скачать XULRUNNER-SDK.

После распаковки архива полезно прописать путь к бинарным файлам в PATH.

Где-то в интернетах нашёлся примерно такой пример:

#include "nsISupports.idl"
[scriptable, uuid(00000000-0000-0000-0000-000000000000)]
interface IMyComponent : nsISupports
{
  // Только один метод, для сложения чисел
  long Add(in long a, in long b);
};

Этот текст надо положить в файл с названием IMyComponent.idl и можно компилировать его в .xpt из командной строки:

xpidl.exe -m typelib -w -v -I D:\my_path_to\xulrunner-sdk\idl -e IMyComponent.xpt IMyComponent.idl

Предположительно, созданный .xpt можно использовать внутри xul-проекта.

Исследования продолжаются.

См. также