HTAでファイル一覧を表示するでさくっとこんなコードを紹介しました。
onload = function() {
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
var folder = fso.GetFolder( location.pathname.match( /.*\\/ ) );
with( new Enumerator( folder.Files ) ) {
for( ; !atEnd(); moveNext() ) {
target.innerHTML += item().Name + "<br />";
}
}
}
改めてみるとひどいコードです。とてもサンプルとはいえないですね。
というわけで突込みを入れていきます。
ここはましなほうですが、省略せずに書くと window.onload となります。
これは3行目の location も同様で、正確にはwindow.location です。
pathname で得られるのはファイル名まで含まれてしまっているので、
正規表現によるマッチング ".*\\" でカレントパスを抜き出しています。
with( new Enumerator( folder.Files ) ) {問題はここ。with ステートメントは続くスコープ内で引数に与えられた
オブジェクトを省略できます。確かVisualBasicにも同じような構文が
あるはずです。これなしに4~8行目を書くと、次のようになります。
var files = new Enumerator( folder.Files );
for( ; !files.atEnd(); files.moveNext() ) {
target.innerHTML += files.item().Name + "<br />";
}
これなら余計な構文もなくサンプルらしいですね!Files コレクションは
そのままだと駄目で Enumerator でラッピングして間接的に使います。
素直に配列で返してくれるとうれしいんですけどね。でもまだ問題が…。
target.innerHTML += files.item().Name + "<br />";
ここでも target といきなり使っていますね。これも windows.target
の省略ですが、location のように予め用意されているものではなく、
<body> 部の <div id="target"></div> を指しています。IDを指定
すると、組込みのオブジェクト名とかぶらなければ何もしなくても
window から参照出来ます。間違いのない書き方はこうです。
var target = document.getElementById( "target" );
本題と違うところで余計な事するのはホント駄目ですね(@@反省。
#SyntaxHighlighter for Windows Live Writer超便利です><。
#「行番号の非表示」にチェックを入れても「標準の表示」では表示
#されっぱな点がちょっと気になりました。プレビューは大丈夫!