XPCOMを直接使う

基本はこれ。よく使われている。

ルートブランチを取得

Cu.import("resource://gre/modules/Services.jsm");
var rootBranch = Services.prefs

特定のブランチを取得

Cu.import("resource://gre/modules/Services.jsm");
var prefBranch = Services.prefs.getBranch("extensions.sample.");

設定の保存と取得

設定値を取得する場合、それが存在しなかったり型が違った場合は例外エラーが発生する事に注意

単純型(真偽、文字、整数)

// 保存
prefs.setBoolPref("samplevalue", true);            // 真偽値型
prefs.setCharPref("samplevalue", "saple string");  // 文字列(ASCII)型
prefs.setIntPref("samplevalue", 10);               // 整数値型
// 取得
var bool   = prefs.getBoolPref("samplevalue");  // 真偽値型
var string = prefs.getCharPref("samplevalue");  // 文字列(ASCII)型
var int    = prefs.getIntPref("samplevalue");   // 整数値型
IntPrefの値はC言語のlong型なので、-2,147,483,648~2,147,483,647の間の数値という制限がある。この範囲外の数値を扱う場合は文字列型として扱う必要がある。

複合型(ユニコード文字、propertiesファイル、パス)

set/getComplexValueは第2引数に指定したインターフェースを持つオブジェクトの保存や取得をする
指定できるのは4種類のみ
実際のprefs.jsには文字列型として保存されるわけで、要するにset/getComplexValueはオブジェクト⇔文字列の変換を良い感じに自動的にやってくれるって事

1.Unicode文字列
// 保存
var str = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
str.data = 'サンプルUnicode文字列';
prefs.setComplexValue("samplevalue", Ci.nsISupportsString, str);
// 取得
var str  = prefs.getComplexValue("samplevalue", Ci.nsISupportsString).data;
2.ローカライズ文字列
取得の際、propertiesファイルパスが指定されていた場合はそのファイルから読み取る。
それ以外はUnicode文字列と同じ動作。
  • chrome://sample/locale/sample.properties
extensions.sample.samplevalue=サンプルUnicode文字列
  • pref.jsの規定値に設定
pref("extensions.sample.samplevalue", "chrome://sample/locale/sample.properties");
  • javascript
// 保存
var locale = Cc["@mozilla.org/pref-localizedstring;1"].createInstance(Ci.nsIPrefLocalizedString);
locale.data = 'サンプルローカライズ文字列';
prefs.setComplexValue("samplevalue", Ci.nsIPrefLocalizedString, locale);
// 取得
var locale = prefs.getComplexValue("samplevalue", Ci.nsIPrefLocalizedString).data;
3.絶対パス
// file は nsIFile オブジェクト
// 保存
prefs.setComplexValue("filename", Ci.nsIFile, file);
// 取得
var file = prefs.getComplexValue("filename", Ci.nsIFile);
4.相対パス
// 保存
var relFile = Cc["@mozilla.org/pref-relativefile;1"].createInstance(Ci.nsIRelativeFilePref);
relFile.relativeToKey = "ProfD"; // プロファイルディレクトリからの相対パスに設定
relFile.file = file;
prefs.setComplexValue("filename", Ci.nsIRelativeFilePref, relFile);
// 取得
var value = prefs.getComplexValue("filename", Ci.nsIRelativeFilePref);
var file = value.file;

JavaScriptコードモジュールを使用

1,2個の設定をちょっと読んだり書いたりするのに便利。
XPCOMを直接使うのとは使い勝手が若干違うので少し戸惑う。

特定のブランチを設定

  1. Cu.import("resource://gre/modules/services-common/preferences.js");
  2. var prefBranch = new Preferences("extensions.sample.");

設定値を取得

  1. Cu.import("resource://gre/modules/services-common/preferences.js");
  2. var value = Preferences.get("extensions.sample.samplevalue");

FUELを使用

XPCOMとは使い勝手がかなり違うので微妙かも。DOMっぽい操作感なので慣れれば良いのか?

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2014年10月28日 14:51