о настройках конфигурации и JS

Интересно, возможно ли получить значения определенных настроек, заданных в about: config, используя javascript?

Стимулом является получение значения настроек, установленных в аддоне Firefox, который я создал, когда пользователь попадает в интерфейс аддона. По сути, я пытаюсь идентифицировать пользователей, приземляющихся на FE, не прося их явно войти в систему.

Ответы на вопрос(1)

Решение Вопроса

Да, ты можешь.

Во-первых, вы должны знать, что Mozilla использует интерфейсы XPCOM для системы настроек.

Три используемых интерфейсаnsIPrefService, nsIPrefBranch а такжеnsIPrefBranch2.

Служба предпочтений создается так же, как вы создаетеСлужба XPCOM.

Два примера, чтобы прояснить это:

// Get the root branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                    .getService(Components.interfaces.nsIPrefBranch);

.

// Get the "extensions.myext." branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                    .getService(Components.interfaces.nsIPrefService);
prefs = prefs.getBranch("extensions.myext.");

И есть 3 типа предпочтений, онистрока, целое число а такжелогический, Есть шесть методов вnsIPrefBranch что читать и писать настройки:getBoolPref (), setBoolPref (), getCharPref (), setCharPref (), getIntPref () а такжеsetIntPref ().

Больше примеров на это:

// Get the "accessibility." branch
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                    .getService(Components.interfaces.nsIPrefService).getBranch("accessibility.");

// prefs is an nsIPrefBranch.
// Look in the above section for examples of getting one.
var value = prefs.getBoolPref("typeaheadfind"); // get a pref (accessibility.typeaheadfind)
prefs.setBoolPref("typeaheadfind", !value); // set a pref (accessibility.typeaheadfind)

Вы также можете использовать сложные типы. Используя nsISupportsString, который используется для обработки строк в настройках, используйте его, когда значение предпочтения может содержать не-ASCII-символы.

Пример:

// prefs is an nsIPrefBranch

// Example 1: getting Unicode value
var value = prefs.getComplexValue("preference.with.non.ascii.value",
      Components.interfaces.nsISupportsString).data;

// Example 2: setting Unicode value
var str = Components.classes["@mozilla.org/supports-string;1"]
      .createInstance(Components.interfaces.nsISupportsString);
str.data = "some non-ascii text";
prefs.setComplexValue("preference.with.non.ascii.value", 
      Components.interfaces.nsISupportsString, str);

Я надеюсь, что вы решите свои сомнения с этим.

Ещеэта страница.

 gfe28 сент. 2010 г., 03:13
Хм, законно, спасибо за совет. ; )
 Fábio27 сент. 2010 г., 18:26
Firefox добавил модуль Service.jsm, который упрощает доступ ко всем интерфейсам:developer.mozilla.org/en/JavaScript/Code_modules/Services.jsm
 Bojan Babic30 сент. 2010 г., 00:23
Спасибо за ответ. Эту технику я использовал на аддоне, чтобы сохранить настройки. Но это не работает для меня, так как этот код выполняется в пространстве имен аддона, и мне нужен был js, который будет загружен в FE и получит настройки из аддона. Это не разрешено из пространства имен js без предупреждения пользователя о действии. Я бы постарался избежать изменения HTML с помощью скрипта из аддона, но если я не найду другого решения, изменение HTML будет приемлемым.

Ваш ответ на вопрос