ユーザ設定インターフェイス

ユーザ設定操作用のインターフェイスのサンプルコードです

var myextension = {
	// preference interface
	prefs: {
		_service: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService),
		setBranch: function(branch) {
			this._service = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch(branch);
		},
		getPref: function(name) {
			switch(this._service.getPrefType(name)) {
				case this._service.PREF_INVALID:
					return null;
				case this._service.PREF_STRING:
					return decodeURIComponent(escape(this._service.getCharPref(name)));
				case this._service.PREF_INT:
					return this._service.getIntPref(name);
				case this._service.PREF_BOOL:
					return this._service.getBoolPref(name);
				default:
					return null;
			}
		},
		setPref: function(name, val) {
			switch(typeof val) {
				case "string":
					this._service.setCharPref(name, unescape(encodeURIComponent(val)));
					break;
				case "number":
					this._service.setIntPref(name, parseInt(val));
					break;
				case "boolean":
					this._service.setBoolPref(name, val);
					break;
				default:
					this.log("cannot set pref - val: " + val);
					return null
			}
			return true;
		},
		get datasource()    this.getPref("datasource"),
		set datasource(val) this.setPref("datasource", val),
	}
	onLoad: function() {
		var mypref = this.prefs.getPref("extensions.myextension.mypref");
		this.prefs.setBranch("extensions.myextension.");
		var anotherpref = this.prefs.getPref("anotherpref");
	}
}
window.addEventListener("load", function() { myextension.onLoad() }, false);

prefs オブジェクトを自分の拡張機能専用オブジェクトのプロパティとして定義し、prefs.getPref() と prefs.setPref() メソッドを使います。設定の型は設定時の引数に応じて自動判別されるので、引数の型には注意してください。

また、prefs.setBranch() メソッドを使えば共通する接頭辞部分を省略できるようになります。Firefox 本体や他の拡張機能の設定を操作する予定がない場合、誤って自分の拡張機能以外の設定を書き換えてしまわないようにするためにも、ブランチを設定しておくことをオススメします。