Ja, Sie können.
Zuerst müssen Sie wissen, dass Mozilla die XPCOM-Schnittstellen für das Präferenzensystem verwendet.
Drei benutzte Schnittstellen sind nsIPrefService, nsIPrefBranch und nsIPrefBranch2.
Der Preferences Service wird auf die gleiche Weise instanziiert, wie Sie einen beliebigen XPCOM service instanziieren.
Zwei Beispiele deutlich machen:
// 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.");
Und es gibt 3 Arten von Vorlieben, sind sie String, integer und boolean. Es gibt sechs Methoden in nsIPrefBranch die Vorlieben lesen und schreiben: getBoolPref(), setBoolPref(), getCharPref(), setCharPref(), getIntPref() und setIntPref().
Weitere Beispiele dazu:
// 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)
Sie können auch komplexe Typen verwenden. Wenn Sie nsISupportsString verwenden, mit dem Zeichenfolgen in Voreinstellungen behandelt werden, verwenden Sie diese Option, wenn der Präferenzwert Nicht-ASCII-Zeichen enthalten darf.
Beispiel:
// 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);
Ich hoffe, dass Sie Ihre Zweifel mit diesem lösen.
Mehr auf this page.
Firefox hinzugefügt das Service.jsm-Modul, das den Zugriff auf alle Schnittstellen erleichtert: https://developer.mozilla.org/en/JavaScript/Code_modules/Services.jsm –
Hmmm, legal, Danke für den Tipp. ;) – Guilherme
Danke für die Antwort. Diese Technik, die ich beim Addon verwendet habe, um Einstellungen zu speichern. Aber das funktioniert nicht für mich, da dieser Code auf dem Addon-Namespace ausgeführt wird und was ich brauchte, war js, das auf FE geladen wird und Präferenzen vom Addon abruft. Aus dem js-Namensraum ist es nicht erlaubt, ohne dass der Benutzer vor einer Aktion gewarnt wird. Ich würde versuchen, zu vermeiden, HTML mit Skript vom Addon zu ändern, aber wenn ich keine andere Lösung finde, würde das Ändern von HTML akzeptabel sein. –