搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

详细了解

Is it possible to user Windows environment variables in Firefox preferences?

  • 5 个回答
  • 2 人有此问题
  • 2 次查看
  • 最后回复者为 NukemBy

more options

Is it possible to use Windows environment variables (e.g. %ProgramFiles% or %APPDATA%) in Firefox preferences? If not, are there native equivalents?

Is it possible to use Windows environment variables (e.g. %ProgramFiles% or %APPDATA%) in Firefox preferences? If not, are there native equivalents?

所有回复 (5)

more options

The prefs.js and user.js file can only contain pref settings and not additional JavaScript.

So you would need to do this via a mozilla.cfg file to specify the pref.

Place a file local-settings.js in the defaults\pref folder where you also find the file channel-prefs.js to specify using mozilla.cfg.

pref("general.config.filename", "mozilla.cfg");
pref("general.config.obscure_value", 0); // use this to disable the byte-shift

See:

You can use these functions in mozilla.cfg:

defaultPref();  // set new default value
pref();         // set pref, but allow changes in current session
lockPref();     // lock pref, disallow changes

//
const Cc=Components.classes,Ci=Components.interfaces;
envUN=Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment).get('USERNAME');

pref("environment.username", envUN);
more options

It works! Thanks. But the preference I want to set is located in a plain vanilla preferences file bundled with an add-on. Is there a way to set a variable in mozilla.cfg which could then be utilized in a plain vanilla preferences file?

more options

I think that you will have to create an extension if you want to do this with normal prefs and convert the value of the pref to resolve the environment variables to absolute values.

Can you give an example of what you try to do?

more options

I'm using an extension with a preference that allows the name and location of its data file to be specified, for example:

pref("extensions.name.dataDir", "C:\Stuff\Data");

I don't want to modify the author's preferences file, so I put the preference in a separate file in the same directory. Everything works fine when I specify an absolute path, but I'd like to do something like:

pref("extensions.name.dataDir", "%APPDATA%\Data");

It seems that it isn't possible to directly utilize Windows environment variables in Firefox preferences files. Pity. Your suggestion seems to work, though I have some concerns regarding the order in which the mozilla.cfg file and the prefs.js files are processed. And I would prefer to handle this in my custom prefs.js file rather than in mozilla.cfg, just so that all related preferences remain grouped together.

I was hoping that I could use your suggestion to set some variables that I could use elsewhere, similar to the way that preference "general.useragent.locale" sets the value of %LOCALE%. Or maybe there's a way to reference the value of one preference from another, for example: pref("pref1", "(value of pref2)"). Or maybe you already have a solution; this issue must have come up before.

Thanks for your help.

more options

I've tried solution from cor-el and it miss some details

  • correct location of mozilla.cfg is <Firefox install dir>\App\Firefox\mozilla.cfg
  • mozilla.cfg can concatenate string, this is not possible in prefs.js
  • value defined in mozilla.cfg overwrites value defined in prefs.js - as far as i understand this happens at startup of firefox

Here is the configuration to overwrite location of the cache directory for example

.\App\Firefox\mozilla.cfg:

//
const Cc=Components.classes,Ci=Components.interfaces;
USERNAME=Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment).get('USERNAME');
LOCALAPPDATA=Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment).get('LOCALAPPDATA');

pref("environment.username", USERNAME);
pref("environment.localappdata", LOCALAPPDATA);
pref("browser.cache.disk.parent_directory", LOCALAPPDATA + '\\MozillaFirefox');

由cor-el于修改