prototype.jsを使えるように
2007-04-24


きっかけ

prototype.jsが大好きだ。組み込みオブジェクトのprototypeを汚染拡張しているところが大好きだ。

なので、WSHでも使ってみたい。

※:以下の記述は、prototyp.js1.4.0ベースです。1.5系はどうかわかりません

困ったことに

prototype.jsを(Windowsで、ね。)ダブルクリックしてみると、さっそく「documentは宣言されていません」とか怒られるんですよ。

これ、当然といえば当然で、prototype.jsはブラウザホストで稼動させることが前提なので、windowやらdocumentやらlocationやらを参照してるからなのだけど、この辺のオブジェクトをダミー宣言してやれば、ClassだのEnumerableだのTryだのは使用できるんですよ。

ダミースクリプト

前のエントリの感じで以下のスクリプトを、prototype.jsよりも前にロードしておくことにする。仮に「dummy.js」とでもしておこう。

// prototype.jsのためのダミー宣言
var window = { Element : null }
var document = {
        getElementById : function() {},
        getElementsByName : function() {},
        getElementsByTagName : function() {},
        createElement : function() {},
        documentElement : null,
        body : null
}
var navigator = { userAgent : null }

んで、prototype.jsもロード

dummy.jsよりも後なら、prototype.jsのロードができるんですよ。以下のように。

with( {
        // ライブラリのパスリスト
        libs : [
                "dummy.js",
                "prototype.js"
        ],
        // libs[]のインデックス
        index : 0,
        // ソース取得メソッド
        getSource : function(path) {
                var stream, fso = new ActiveXObject("Scripting.FileSystemObject");
                try {
                        stream = fso.OpenTextFile( path, 1 );
                        return stream.ReadAll();
                } finally {
                        stream.Close();
                }
        }
} ) {
        while( index < libs.length ) {
                try {
                        eval( getSource( libs[ index++ ] ) );
                } catch(e) {
                        WScript.Echo( e.description || e.message || "error" );
                }
        }
}
WScript.Echo(
        $R(1,3).map( function(i) {
                return "番号:" + i;
        } ).join(", ")
); // 番号:1, 番号:2, 番号:3

コンソールベースのWSHだとテキスト処理かファイル処理が主になると思うけど、こういうときにEnumerableインターフェイスが使えるのって、個人的にはかなり便利で手放せない感じ。

特に、FileSystemObjectのFilesとかSubFoldersとかを取り回すEnumeratorにEnumerableなラッパーかぶせたりすると、100単位のファイルがあるディレクトリを取りまわしたりするときもメモリを消費しないですむ(処理は遅いけど)ので、お勧めです。需要はなさそうだけど。

[JavaScript]
[WSH]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット