Сегодня я хотел бы рассказать о том, как можно реализовать систему настроек для своего расширения. Начиная с определения опций и заканчивая добавлением в ваше расширение возможности менять настройки с помощью созданных вами диалоговых окон.
Первую статью, надеюсь из будущего цикла моих статей, можно найти здесь.
Система настроек расширений в Firefox имеет очень простую структуру. Наберите в адресной строке about:config, и вы увидите все настройки не только самого браузера, но и всех установленных расширений. Тут же их можно изменить под свои нужды.
Чтобы ваше расширение имело собственный набор настроек, нужно создать каталог
Таким образом, мы создали набор настроек по-умолчанию. Перезапустите Firefox. Теперь просмотреть, а также изменить значения этих параметров можно на странице
Следующий отрывок кода показывает, как получить доступ к настройкам:
Последняя строка функции
Итак, теперь переменная
Т.к. при инициализации объекта настроек мы указали в качестве пространства имен
Дополнительно о методах предоставляемых интерфейсом
Для изменения настроек вашего расширения есть возможность создать диалоговое окно, в котором можно будет отобразить нужные вам опции, и пользователь сможет менять их значения на нужные ему.

Создайте файл
Теперь по порядку:
Если вы создали этот файл для уже установленного расширения, то необходимо это расширение удалить и установить заново, чтобы кнопка «Настройка» стала доступной.

И последнее, о чем я хотел рассказать — это реакция расширения на какие-либо изменения его настроек. В самом начале мы указали, что хотим обрабатывать все сообщения, связанные с изменением настроек. Вот пример функции, которая может с этим справиться:
Коротко о входных параметрах:
Это необходимый минимум для работы с настройками расширений, более подробно можно об этом узнать по предоставленным мною ссылкам или на сайте developer.mozilla.org.
Исходники примера можно взять здесь.
Первую статью, надеюсь из будущего цикла моих статей, можно найти здесь.
Система настроек расширений в Firefox имеет очень простую структуру. Наберите в адресной строке about:config, и вы увидите все настройки не только самого браузера, но и всех установленных расширений. Тут же их можно изменить под свои нужды.
Чтобы ваше расширение имело собственный набор настроек, нужно создать каталог
defaults/preferences
(если он ранее не был создан) и поместить туда .js-файл с настройками. Вот пример такого файла.
- pref("extensions.sample.username", "Joe");
- pref("extensions.sample.sort", 2);
- pref("extensions.sample.showAdvanced", true);
* This source code was highlighted with Source Code Highlighter.
Таким образом, мы создали набор настроек по-умолчанию. Перезапустите Firefox. Теперь просмотреть, а также изменить значения этих параметров можно на странице
about:config
.Чтение настроек
Следующий отрывок кода показывает, как получить доступ к настройкам:
- init : function()
- {
- this.prefs = Components.classes["@mozilla.org/preferences-service;1"]
- .getService(Components.interfaces.nsIPrefService)
- .getBranch("extensions.sample.");
- this.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
- this.prefs.addObserver("", this, false);
- }
* This source code was highlighted with Source Code Highlighter.
Последняя строка функции
init
указывает, что все события, связанные с изменением настроек, должны посылаться нашему объекту.Итак, теперь переменная
this.prefs
ссылается на объект с интерфейсом nsIPrefBranch. Прочитать значения какой либо опции можно следующим образом:
- this.prefs.getCharPref("username");
* This source code was highlighted with Source Code Highlighter.
Т.к. при инициализации объекта настроек мы указали в качестве пространства имен
extensions.sample.
, то будет прочитана опция extensions.sample.username
, которую мы создали ранее.Дополнительно о методах предоставляемых интерфейсом
nsIPrefBranch
можно прочитать тут.Изменение настроек
Для изменения настроек вашего расширения есть возможность создать диалоговое окно, в котором можно будет отобразить нужные вам опции, и пользователь сможет менять их значения на нужные ему.

Создайте файл
options.xul
в каталоге chrome/content
и добавьте в него следующее содержимое:
- <?xml version="1.0"?>
- <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
- <prefwindow id="test-prefs"
- title="Test options"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <prefpane id="test-pane" label="Test Settings">
- <preferences>
- <preference id="pref_username" name="extensions.sample.username" type="string"/>
- </preferences>
- <hbox align="center">
- <label control="username" value="Username: "/>
- <textbox preference="pref_username" id="username" maxlength="24"/>
- </hbox>
- </prefpane>
- </prefwindow>
* This source code was highlighted with Source Code Highlighter.
Теперь по порядку:
<prefpane>
— является контейнером для элементов управления диалогового окна, также этот элемент содержит ссылки на настройки компонента
<preferences>
— содержит ссылки на опции вашего компонента
<preference>
— ссылка на опцию. В параметреname
указывается имя опции, в параметреtype
тип этой опции (string
,int
илиboolean
), параметрid
задает идентификатор настройки внутри диалогового окна, по которому уже элементы управления будут сами считывать и записывать значения настроек (посмотрите на атрибутpreference
элементаtextbox
)
- Далее следуют элементы управления диалогового окна, с помощью которых можно изменить опции вашего расширения
Если вы создали этот файл для уже установленного расширения, то необходимо это расширение удалить и установить заново, чтобы кнопка «Настройка» стала доступной.

И последнее, о чем я хотел рассказать — это реакция расширения на какие-либо изменения его настроек. В самом начале мы указали, что хотим обрабатывать все сообщения, связанные с изменением настроек. Вот пример функции, которая может с этим справиться:
- observe: function(subject, topic, data)
- {
- if (topic != "nsPref:changed")
- {
- return;
- }
-
- switch(data)
- {
- case "username":
- alert(this.getUserName());
- break;
- }
- }
* This source code was highlighted with Source Code Highlighter.
Коротко о входных параметрах:
subject
— ссылка на измененный объект или событие (подробней тут)
topic
— указывает на тип события, нас в данном случае интересует «nsPref:changed»
data
— это данные, передаваемые вместе с событием, в нашем случае это будет имя опции, которую изменили
Это необходимый минимум для работы с настройками расширений, более подробно можно об этом узнать по предоставленным мною ссылкам или на сайте developer.mozilla.org.
Исходники примера можно взять здесь.