Sì, è possibile.
Innanzitutto, è necessario sapere che Mozilla utilizza le interfacce XPCOM per il sistema delle preferenze.
Tre interfacce utilizzate sono nsIPrefService, nsIPrefBranch e nsIPrefBranch2.
Il servizio di preferenze viene istanziato nello stesso modo in cui si crea uno XPCOM service.
Due esempi per mettere in chiaro:
// 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.");
E ci sono 3 tipi di preferenze, sono stringa, intero e booleano. Ci sono sei metodi in nsIPrefBranch che leggono e scrivono le preferenze: getBoolPref(), setBoolPref(), getCharPref(), setCharPref(), getIntPref() e setIntPref().
Altri esempi su quella:
// 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)
È anche possibile utilizzare tipi complessi. Usando nsISupportsString, viene usato per gestire le stringhe nelle preferenze, quindi usalo quando il valore di preferenza può contenere caratteri non ASCII.
Esempio:
// 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);
Spero che a risolvere il dubbio con questo.
Ulteriori informazioni su this page.
Firefox ha aggiunto il modulo Service.jsm che facilita l'accesso a tutte le interfacce: https://developer.mozilla.org/en/JavaScript/Code_modules/Services.jsm –
Hmmm, legale, Grazie per il suggerimento. ;) – Guilherme
Grazie per la risposta. Questa tecnica che ho usato su addon per memorizzare le preferenze. Ma questo non funziona per me dal momento che questo codice viene eseguito sullo spazio dei nomi addon e ciò di cui avevo bisogno era js che verrà caricato su FE e recupererà le preferenze da addon. Non è consentito dallo spazio dei nomi js senza che l'utente sia avvisato dell'azione. Cercherò di evitare di alterare html con script da addon, ma se non trovo altra soluzione alterando html sarebbe accettabile. –