Да, вы можете.
Во-первых, вам нужно знать, что Mozilla использует интерфейсы XPCOM для системы предпочтений.
Три используемые интерфейсы nsIPrefService, nsIPrefBranch и nsIPrefBranch2.
Служба настроек создается таким же образом, как и экземпляр любого XPCOM service.
Два примера, чтобы понять:
// 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);
Я надеюсь, вам решить ваши сомнения в этом.
Подробнее о this page.
Firefox добавил модуль Service.jsm, который упрощает доступ ко всем интерфейсам: https://developer.mozilla.org/en/JavaScript/Code_modules/Services.jsm –
Хммм, юридический, Спасибо за отзыв. ;) – Guilherme
Спасибо за ответ. Этот метод, который я использовал на аддоне, чтобы сохранить предпочтения. Но это не работает для меня, так как этот код запускается в пространстве имен аддонов, и мне нужен был js, который будет загружен в FE и получить настройки из аддона. Это не допускается из пространства имен js без предупреждения пользователя о действии. Я постараюсь избежать изменения html со сценарием из аддона, но если я не найду другого решения, изменение html было бы приемлемым. –