Scripting.FileSystemObject を使いライブラリを読み込み eval でコードを評価します。
(?:execScript|ScriptControl) で使う場合 (?:execScript|ScriptControl) に Isleipnir を渡して (?:execScript|ScriptControl) 内部でコードの評価をを行ってください。
組み込みスクリプトで使う場合 eval は必ずローカルスコープ内で行うようにしましょう。グローバルスコープで実行すると settingsInit 関数がグローバル変数内で宣言されるため不正使用される恐れがあります。
(function(){
var lib_Path = [sleipnir.API.AppPath,'CaitSith.js'].join(''); // CaitSith.js ファイルのあるパスを指定します。
var fso = sleipnir.CreateObject('Scripting.FileSystemObject'); // Scripting.FileSystemObject の作成
// 変数 lib_Path で指定したパスにファイルがあるかどうかを確認
if( fso.FileExists(lib_Path) ){ // ファイルがあったら
var lib = fso.OpenTextFile(lib_Path); // ファイルを展開
eval(lib.ReadAll()); // ファイルの内容を eval、eval されたスコープ内に settingsInit 関数が作成されます。
lib.Close(); // ファイルを閉じる
fso = null; // fso を開放
}else{
// ファイルがなかったら中断
fso = null;
return
};
// 以下、通常の処理を書きます。
})();
execScript 内で使う場合
_window.sleipnir = sleipnir;
_window.execScript('('+function(){
var lib_Path = [sleipnir.API.AppPath,'CaitSith.js'].join(''); // CaitSith.js ファイルのあるパスを指定します。
var fso = sleipnir.CreateObject('Scripting.FileSystemObject'); // Scripting.FileSystemObject の作成
// 変数 lib_Path で指定したパスにファイルがあるかどうかを確認
if( fso.FileExists(lib_Path) ){ // ファイルがあったら
var lib = fso.OpenTextFile(lib_Path); // ファイルを展開
eval(lib.ReadAll()); // ファイルの内容を eval、eval されたスコープ内に settingsInit 関数が作成されます。
lib.Close(); // ファイルを閉じる
fso = null; // fso を開放
}else{
// ファイルがなかったら中断
fso = null;
return
};
// 以下、通常の処理を書きます。
}+')()', 'JavaScript');
_window.sleipnir = null;
(function(){ // グローバルなスコープを汚さないようにする
var pnir = new ActiveXObject('Sleipnir.API'); // Sleipnir.API へアクセスできるようにします。
var fso = new ActiveXObject('Scripting.FileSystemObject'); // Scripting.FileSystemObject の作成
var lib_Path = [pnir.AppPath,'CaitSith.js'].join(''); // CaitSith.js ファイルのあるパスを指定します。
// 変数 lib_Path で指定したパスにファイルがあるかどうかを確認
if( fso.FileExists(lib_Path) ){ // ファイルがあったら
var lib = fso.OpenTextFile(lib_Path); // ファイルを展開
eval(lib.ReadAll()); // ファイルの内容を eval、eval されたスコープ内に settingsInit 関数が作成されます。
lib.Close(); // ファイルを閉じる
pnir = null; // pnir を開放
fso = null; // fso を開放
}else{
// ファイルがなかったら中断
pnir = null;
fso = null;
return
};
// 以下、通常の処理を書きます。
})();
下記の例では {Sleipnir}\resources\scriptSettings\hoge.xml を読み込み 変数 MySet に Setting Object を作成しています。
var MySet = settingsInit('hoge'); // hoge は読み込みたいデフォルト設定ファイルの名前から拡張子を取り除いたもの
設定を参照するには2つの方法があります。
以下のサンプル設定ファイルを読み込んだ場合で説明していきます。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <global> <appInformations> <name>hoge</name> <version>100</version> </appInformations> <appSettings> <SET1> <interface> <caption>設定項目1</caption> </interface> <syntax> <type>boolean</type> </syntax> <value>true</value> </SET1> <SET2> <interface> <caption>設定項目2</caption> </interface> <syntax> <type>number</type> <min>0</min> <max>10</max> <round /> </syntax> <value>5</value> </SET2> </appSettings> <global> </configuration>
すべての設定値を一度に読み出します。
var SETTINGS = MySet.getAll(); // 連想配列を返します。 alert(SETTINGS.SET1); // true; alert(SETTINGS.SET2); // 5;
変数 SETTINGS にすべての設定項目を含む連想配列を代入します。
変数 SETTINGS のプロパティとして設定項目を参照できます。
var SETTINGS = MySet.getAll(true); // 引数を与えて文字列を返すようにします。 alert(typeof SETTINGS); // string /* 変数 SETTINGS には以下の文字列がセットされます。 var SET1 = true; var SET2 = 5; */ alert(SET1); // undefined alert(SET2); // undefined eval(SETTINGS); alert(SET1); // true alert(SET2); // 5
変数 SETTINGS にすべての設定項目を含む文字列を代入します。
変数 SETTINGS を eval することによって変数化して使います。
set メソッドなどによって変更をファイルに反映させたとき変更後の値を取得するのに適しています。
実行のたびに XML ファイルを読みにいくので全設定を取得したい場合は getAll や getAllText を使うことが推奨されます。
alert( MySet.get('SET1') ); // true;
alert( MySet.get('SET2') ); // 5;
変数 SETTINGS にすべての設定項目を含む連想配列を代入します。
変数 SETTINGS のプロパティとして設定項目を参照できます。
設定を変更しユーザー設定ファイルに変更を保存する場合は set メソッドを使用します。
前回使用時の状態を復元するような場合を除けば通常使う必要はありません。
alert( MySet.set('SET1',false) ); // true
alert( MySet.set('SET2', 9) ); // true
alert( MySet.set('SET2',20) ); // false
alert( MySet.set('SET2',6.5) ); // false
alert( MySet.set('SET2','hoge') ); // false
// 値の変更を確認
alert( MySet.get('SET1') ); // false
alert( MySet.get('SET2') ); // 9
設定の変更が正常に行われた場合 set メソッドは true を返します。失敗した場合 false を返します。
SET2 は書式制限によって 20 以上の数値を持つことができないので MySet.get('SET2',20) は失敗します。
SET2 は書式制限によって 小数を持つことができないので MySet.get('SET2',6.5) は失敗します。
SET2 は書式制限に max,min,round を持っているため数値型しかもてません。 MySet.get('SET2','hoge') は失敗します。
type による指定がなくても max,min,round の何れかが指定されている場合その設定項目は数値しかもてないことに注意してください。