Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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);

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

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