2010-09-26 12 views
10

Me pregunto si es posible obtener valores de ciertas preferencias establecidas en about: config using javascript?acerca de preferencias de configuración y js

Incentive es para obtener el valor de las preferencias establecidas en el complemento de Firefox que he creado cuando el usuario aterriza en la interfaz de Addon. Básicamente, estoy tratando de identificar a los usuarios que aterricen en FE sin pedirles que inicien sesión de manera explícita.

Respuesta

8

Sí, puedes.

Primero, necesita saber que Mozilla usa las interfaces XPCOM para el sistema de preferencias.

Tres interfaces utilizadas son nsIPrefService, nsIPrefBranch y nsIPrefBranch2.

El servicio de preferencias se instancia de la misma forma en que se instancia cualquier XPCOM service.

Dos ejemplos para que quede claro:

// 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."); 

Y hay 3 tipos de preferencias, son cadena, número entero y booleano. Hay seis métodos en nsIPrefBranch que leen y escriben preferencias: getBoolPref(), setBoolPref(), getCharPref(), setCharPref(), getIntPref() y setIntPref().

Más ejemplos en que:

// 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) 

También se pueden utilizar los tipos complejos. Mediante el uso de nsISupportsString, que se utiliza para manejar cadenas en las preferencias, entonces, use esto cuando el valor de preferencia pueda contener caracteres que no sean ASCII.

Ejemplo:

// 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); 

espero a resolver su duda con esto.

Más sobre this page.

+0

Firefox agregó el módulo Service.jsm que facilita el acceso a todas las interfaces: https://developer.mozilla.org/en/JavaScript/Code_modules/Services.jsm –

+0

Hmmm, legal, gracias por la sugerencia. ;) – Guilherme

+0

Gracias por responder. Esta técnica he estado usando en addon para almacenar preferencias. Pero esto no funciona para mí, ya que este código se ejecuta en el espacio de nombres de los complementos y lo que necesitaba eran js que se cargarían en FE y recuperar las preferencias de addon. No está permitido desde el espacio de nombres js sin que se advierta al usuario de la acción. Intentaré evitar alterar html con script desde addon, pero si encuentro que no hay otra solución que altere html sería aceptable. –

Cuestiones relacionadas