先日買ったJavaScript本のコードを何度か写経して、そろそろ自分でもコードを書いてみたくなった。
thom.hateblo.jp
そこで、普段仕事でもよく使うIE操作のテクニックの準備段階である、開いているIEのURLを取得するコードを書いてみることにした。
そこで、VBScriptで書いたコードをJavaScriptに直していくことにした。
以下はVBSで書いたコード。
Call test Sub test() With CreateObject("Shell.Application") For i = 0 To .Windows.Count - 1 Dim a: a = "" On Error Resume Next a = .Windows(i).document.URL On Error GoTo 0 If Len(a) > 0 Then MsgBox a Next End With End Sub
JavaScriptに直してみたのがこちら。
test(); function test() { var sh = WScript.CreateObject("Shell.Application"); for (var i = 0; i < sh.Windows().Count; i++) { var a = ""; try { a = sh.Windows(i).document.URL; } catch(e) { } if(a) WScript.echo(a); } }
出来上がってしまえばなんてことは無いのだが、作ってる最中は実行時エラーとの戦いだった。
セミコロンが抜けてるだのカッコが無いだのと、まぁ文句が多いこと。。
それと、大文字と小文字を厳格に区別するので、ifをIfと書いたり、echoをEchoと書いて動かなかったりした。
ひとつ、ハマってしまったのはsh.Windows().Countの部分。
最初sh.Windows.Countと書いていて、小文字にしても動かず途方に暮れて質問サイトで聞いてみたらあっさり回答が来た。sh.Windowsの後にカッコがいるらしい。
あとこれは自己解決したが、変数aの判定で最初、if(a.length > 0)としていたが、これではダメだった。
VBScriptのOn Error Resume Nextと違い、try ~ catchでは不明なプロパティをaに代入しようとするとundefinedが入ってしまうようだ。
undefinedや""はそのままifで判定するとfalseになり、1文字以上の文字列はtrueになる仕様のようなので、結局if(a)でやりたいことができた。
そういえばVBAも最初始めたころはエラー連発だったのを思い出した。
今でこそ、一気に書き上げてさくっと動いてしまったりするが、初心者の頃はちびちび作りながらコンパイルして、エラーが出て、何時間も悩んで…ということをやっていた。
繰り返し失敗して、悩むことでだんだんプログラミングの勘が養われてくるんだと思う。