JScript内でVBScriptを実行する2007年05月08日 20時15分59秒

こんなに簡単にできるの?

Kanegon's Web Pageというサイトで、Script Controlというコンポーネントの存在を知った。

これはVBScriptやJScriptなどのActiveScriptを実行するためのActiveXコントロールで、以前から存在は知っていたが、UIコンテナがない環境でもサクっと使用できると知り目から鱗が落ちた。

ちょっとコードなど

論より証拠、JScriptからVBScriptを実行するサンプルを以下に示す。

// VBSのTypeName関数で、ActiveXObjectの型の名前を返す関数を定義する
var sc = new ActiveXObject("ScriptControl");
sc.Language = "VBScript";
sc.AddCode( "Function GetTypeName(obj) : GetTypeName = TypeName( obj ) : End Function" );

// XHRの型名を取得 → IXMLHTTPRequest
WScript.Echo( sc.Run( "GetTypeName", new ActiveXObject("Microsoft.XMLHTTP") ) );

// XMLDOMDocumentの型名を取得 → DOMDocument
WScript.Echo( sc.Run( "GetTypeName", new ActiveXObject("MSXML.DOMDocument") ) );

// IEの型名を取得 → IWebBrowser2
var ie = new ActiveXObject("InternetExplorer.Application");
WScript.Echo( sc.Run( "GetTypeName", ie ) );
ie.Quit();

最初の3行の定義をするだけで、JScript単体では不可能な「ActiveXオブジェクトの型の名前を取得する」という機能をVBSの力を借りて実現できる。

これで何がうれしいの?

VBSにあってJSにない機能というのはいくつかあるが、特にブラウザ上でのpromptに相当するInputBox関数は使える局面があると思う。そのほか、上記のサイトではADODB.Streamのバイナリデータの参照にVBSを経由させる方法を紹介していた。

そんだけといえば、そんだけだけど。

上記サイトではこのテクニックの他にJScriptでExcelなどを扱った後にGCを強制発動させる隠しメソッド「CollectGarbage」なんかについても言及されている。「覚書とか」の「JavaScript メモ」と「スクリプトの文字コード処理に関する覚書」は非常に役立つと思う。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2007/05/08/1494362/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。