最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - about config preferences and js - Stack Overflow

programmeradmin2浏览0评论

I wonder if it is possible to get values of certain preferences set in about:config using javascript?

Incentive is to get value of preferences set in firefox addon i've created when user lands on addon front end. Basically, I'm trying to identify users landing on FE without asking them to login explicitly.

I wonder if it is possible to get values of certain preferences set in about:config using javascript?

Incentive is to get value of preferences set in firefox addon i've created when user lands on addon front end. Basically, I'm trying to identify users landing on FE without asking them to login explicitly.

Share asked Sep 26, 2010 at 0:14 Bojan BabicBojan Babic 6035 silver badges19 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 9

Yes, you can.

First, you need to know that Mozilla uses the XPCOM interfaces for the preferences system.

Three used interfaces are nsIPrefService, nsIPrefBranch and nsIPrefBranch2.

The preferences service is instantiated in the same way you instantiate any XPCOM service.

Two examples to make it clear:

// Get the root branch
var prefs = Components.classes["@mozilla/preferences-service;1"]
                    .getService(Components.interfaces.nsIPrefBranch);

.

// Get the "extensions.myext." branch
var prefs = Components.classes["@mozilla/preferences-service;1"]
                    .getService(Components.interfaces.nsIPrefService);
prefs = prefs.getBranch("extensions.myext.");

And there are 3 types of preferences, they're string, integer and boolean. There are six methods in nsIPrefBranch that read and write preferences: getBoolPref(), setBoolPref(), getCharPref(), setCharPref(), getIntPref() and setIntPref().

More examples on that:

// Get the "accessibility." branch
var prefs = Components.classes["@mozilla/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)

You can also use plex types. By using nsISupportsString, that is used to handle strings in preferences, so, use this when the preference value may contain non-ASCII characters.

Example:

// 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/supports-string;1"]
      .createInstance(Components.interfaces.nsISupportsString);
str.data = "some non-ascii text";
prefs.setComplexValue("preference.with.non.ascii.value", 
      Components.interfaces.nsISupportsString, str);

I hope you solve your doubt with this.

More on this page.

发布评论

评论列表(0)

  1. 暂无评论