о настройках конфигурации и JS - PullRequest
10 голосов
/ 26 сентября 2010

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

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

1 Ответ

8 голосов
/ 26 сентября 2010

Да, вы можете.

Во-первых, вы должны знать, что 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 типа предпочтений: string , integer и логическое 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);

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

Подробнее о этой странице .

...