【注意】JScript限定です。JavaScriptでは使えません。
先日、JScriptで起動中のIEからURLを取得するコードを書いた。
thom.hateblo.jp
本当はVBSのFor Eachみたいなもので数を意識せずにループしたかったが、色々調べながらやってみたものの同じような処理はできず、結局sh.Windows().Countを取って0番目のアイテムからループさせた。
以下、うまくいかなかっった方法。
for each (var i in sh.Windows()) { for (var i in sh.Windows()) { for (var i of sh.Windows()) {
ところが今日別の調べものをしていて偶然そのEnumeratorオブジェクトというものを見つけた。
Enumerator オブジェクト (JavaScript)
読み方は、イニュメレーター。
For Eachのようにとはいかないが、これを使えば数がいくつあるかを意識せずにループを回せる。
これはMicrosoftのJScript独自の実装のようで、一般的なWebページのJavaScriptなどでは使用するとIE以外のブラウザではうまく動かない。
ただ今回のようにWSHで使うにはうってつけだった。
使い方はMSDNよりも以下の記事が分かりやすい。
d.hatena.ne.jp
できたコードはこちら。
ie(); function ie() { var sh = WScript.CreateObject("Shell.Application"); var e = new Enumerator(sh.Windows()); e.moveFirst(); while(e.atEnd() == false) { var a = ""; try { a = e.item().document.URL; } catch(er) { } if(a) WScript.echo(a); e.moveNext(); } }
もともとWSH自体、本来のWebで使用するJavaScriptとは違う分野の処理なので、こうしたJScriptならではの機能は嬉しい。
まあ、そういうのはVBSでやれよって話なんだろうけど。