Сегодня я хотел бы рассказать о том, как можно реализовать систему настроек для своего расширения. Начиная с определения опций и заканчивая добавлением в ваше расширение возможности менять настройки с помощью созданных вами диалоговых окон.
Первую статью, надеюсь из будущего цикла мо��х статей, можно найти здесь.
Система настроек расширений в 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.
Исходники примера можно взять здесь.
