「prefs.js設定の読み書き」の編集履歴(バックアップ)一覧はこちら

prefs.js設定の読み書き」(2014/10/28 (火) 14:51:10) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#contents() *XPCOMを直接使う 基本はこれ。よく使われている。 -[[Preferences - Code snippets | MDN>https://developer.mozilla.org/en-US/docs/Code_snippets/Preferences]] -[[nsIPrefService - XPCOM Interface Reference | MDN>https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIPrefService]] -[[nsIPrefBranch - XPCOM Interface Reference | MDN>https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIPrefBranch]] **ルートブランチを取得 #highlight(javascript){ Components.utils.import("resource://gre/modules/Services.jsm"); var rootBranch = Services.prefs} **特定のブランチを取得 #highlight(javascript){ Components.utils.import("resource://gre/modules/Services.jsm"); var prefBranch = Services.prefs.getBranch("extensions.sample.");} **設定の保存と取得 設定値を取得する場合、それが存在しなかったり型が違った場合は''例外エラーが発生する事に注意''。 ***単純型(真偽、文字、整数) #highlight(javascript){ // 保存 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文字列'' #highlight(javascript){ var Cc = Components.classes; var Ci = Components.interfaces; // 保存 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 #highlight(javascript){ var Cc = Components.classes; var Ci = Components.interfaces; // 保存 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 I/O - Mozilla | MDN>https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O#Storing_nsILocalFile_in_preferences]] #highlight(javascript){ // file は nsIFile オブジェクト var Ci = Components.interfaces; // 保存 prefs.setComplexValue("filename", Ci.nsIFile, file); // 取得 var file = prefs.getComplexValue("filename", Ci.nsIFile);} ''4.相対パス'' #highlight(javascript){ var Cc = Components.classes; var Ci = Components.interfaces; // 保存 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を直接使うのとは使い勝手が若干違うので少し戸惑う。 -[[Labs/JS Modules - MozillaWiki>https://wiki.mozilla.org/Labs/JS_Modules#Preferences]] **特定のブランチを設定 #highlight(linenumber,javascript){ Components.utils.import("resource://gre/modules/services-common/preferences.js"); var prefBranch = new Preferences("extensions.sample.");} **設定値を取得 #highlight(linenumber,javascript){ Components.utils.import("resource://gre/modules/services-common/preferences.js"); var value = Preferences.get("extensions.sample.samplevalue");} *FUELを使用 XPCOMとは使い勝手がかなり違うので微妙かも。DOMっぽい操作感なので慣れれば良いのか? -[[Handling Preferences - XUL School Tutorial | MDN>https://developer.mozilla.org/ja/docs/XUL_School/Handling_Preferences]]
#contents() *XPCOMを直接使う 基本はこれ。よく使われている。 -[[Preferences - Mozilla | MDN>https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Preferences]] -[[nsIPrefService - Mozilla | MDN>https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIPrefService]] -[[nsIPrefBranch - Mozilla | MDN>https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIPrefBranch]] **ルートブランチを取得 #highlight(javascript){ Cu.import("resource://gre/modules/Services.jsm"); var rootBranch = Services.prefs} **特定のブランチを取得 #highlight(javascript){ Cu.import("resource://gre/modules/Services.jsm"); var prefBranch = Services.prefs.getBranch("extensions.sample.");} **設定の保存と取得 設定値を取得する場合、それが存在しなかったり型が違った場合は''例外エラーが発生する事に注意''。 ***単純型(真偽、文字、整数) #highlight(javascript){ // 保存 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文字列'' #highlight(javascript){ // 保存 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 #highlight(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 I/O - Mozilla | MDN>https://developer.mozilla.org/en-US/Add-ons/Code_snippets/File_I_O#Storing_nsILocalFile_in_preferences]] #highlight(javascript){ // file は nsIFile オブジェクト // 保存 prefs.setComplexValue("filename", Ci.nsIFile, file); // 取得 var file = prefs.getComplexValue("filename", Ci.nsIFile);} ''4.相対パス'' #highlight(javascript){ // 保存 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を直接使うのとは使い勝手が若干違うので少し戸惑う。 -[[Labs/JS Modules - MozillaWiki>https://wiki.mozilla.org/Labs/JS_Modules#Preferences]] **特定のブランチを設定 #highlight(linenumber,javascript){ Cu.import("resource://gre/modules/services-common/preferences.js"); var prefBranch = new Preferences("extensions.sample.");} **設定値を取得 #highlight(linenumber,javascript){ Cu.import("resource://gre/modules/services-common/preferences.js"); var value = Preferences.get("extensions.sample.samplevalue");} *FUELを使用 XPCOMとは使い勝手がかなり違うので微妙かも。DOMっぽい操作感なので慣れれば良いのか? -[[Handling Preferences - XUL School Tutorial | MDN>https://developer.mozilla.org/ja/docs/XUL_School/Handling_Preferences]]

表示オプション

横に並べて表示:
変化行の前後のみ表示: