XREA.COM Logo XREA.COM Ad

Sleipnir2スレ

27l ★:2007/04/27(金) 08:24:29 ID:???
SleipnirScriptの余計なデフォルトグローバル変数による汚染を浄化する
SleipnirScriptには、ドキュメントに書かれているsleipnir,_document,_window以外にも、色々な変数・関数が最初から定義されているようである。
alert()などがすぐに使えるのはWSHに比べて親切だが、思いがけない関数が定義済みでバグの元になることがある。
例えば、print()関数を実行すると、Webページの印刷ダイアログが表示される。
また、URL変数では、ページのURLを取得したり、値を設定することでそのページを表示することが出来る。

これらの変数は、「URL=」で上書きすることも「URL=undefined」として削除することも出来ない。
同じ名前のグローバル変数を定義したいとき、邪魔なことこの上ない。死ね。

頭に来たので、別途スクリプトコントロールを生成して、必要なオブジェクトだけを持ち越し、ゴミのない清らかな環境で実行することに。
以下のようにする。

with(new ActiveXObject('MSScriptControl.ScriptControl.1')){
Language='JScript';AddObject('document',_document);AddObject('window',_window);AddObject('sleipnir',sleipnir);
Eval('('+(function(){
basedir=sleipnir.API.AppPath.replace(/bin\\$/,"ScrapBook\\");
eval((new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(basedir+"lib\\Std.js").ReadAll());
use('URL');
alert((new URL(document.location)).path.file);
}).toString()+')();');
}

ちなみに、Eval()から戻ってSleipnirScriptが終了する前なら、スクリプトコントロールにsleipnirオブジェクトをもちこして利用することが出来る。
57KB
名前: E-mail:
ファイル:
0ch BBS 2005-10-08