|
|
第10回 HTAでフォームを利用したサンプルを作る
長い間プログラムの世界とかかわっていると、大して古い話でもないのに「そういえば、そんなのもあったね」と懐かしさを込めて思い出されてしまう開発環境がいくつかあります。このカンタン10分プログラミングで何度か取り上げてきたHTA(HTML アプリケーション)もおそらくその一つです。 HTAを思い出そうHTAはHTMLをベースとしたプログラム環境であり、外観はHTML、内部処理はVBScript(まさに「ああ、そんな言語もあったね」の典型ですね)あるいはJavaScript(頑なにマイクロソフトは“これはJScriptだ”と主張していた時期です)で実装します。HTMLベースなのでコンパイルも必要ありませんし、メモ帳のようなテキスト・エディタさえあれば誰にでも簡単に作れるお手軽な開発環境です。 実際にはHTAという開発環境用のランタイムが存在していたわけではなく、Internet Explorerを拡張子「HTA」に結びつけて動作させているだけなので、動いているのはIEそのものです。口の悪い言い方をすれば、コマンドライン・ベースであるWSH(Windows Scripting Host)にHTMLでガワをかぶせたものだとも言えなくはありません。無愛想なコマンドラインに、ある程度のインタフェースを持たせる考え方は、最初期のJavaが、サンプルをキャプチャしたときの見栄えの悪さからJavaアプレット中心に解説されていたのに似ています。 登場時から好評だったとは言い難く、公式ページさえ放置気味のHTAですが、近年になって少しずつ状況が変わってきました。一番大きな変化はJavaScriptが、2008年あたりから再評価されだしていることです。Ajaxの台頭ですね。 AjaxのコアとなるDOM系プログラムはHTMLベースのプログラミングを大きく変化させました。各種フリーAjaxライブラリはHTMLの限界を超えた表現力をブラウザ上に提供しています。HTAはHTMLベースでJavaScriptに対応していますから、実はAjax系ライブラリも、IEが対応しているものであれば使用できます。 こうした状況の変化から、ひょっとしたら最近のHTAは使えるものになっているのではないかという好奇心が私の中にふつふつとわき上がってきました。そこで、もう一度HTAについて勉強して、少しサンプルを捻り出してみることにしました。参考までに、これまでに当連載でHTAを取り上げた回をご紹介しておきます。 HTAの作り方と初期制限ではHTAの実行ファイルを作ってみましょう。メモ帳などのテキスト・エディタで次のコードを打ち込んで、test.htaという名前でデスクトップに保存します。
![]() 図1●上はデスクトップに作ったHTAのアイコン、下はHTMLドキュメントのアイコン(HTMLは筆者がデフォルト・ブラウザにChromeを使っているためChromeのアイコンになっている。環境によってIEやFirefoxのアイコンになる)
お気付きのように、このコードはVBScriptを含んでいるだけの普通のHTMLです。ただし拡張子を.htmlとはせず、.htaとして保存しました。デスクトップには通常のHTMLドキュメントのアイコンではなく、コマンドライン・プログラムのようなアイコンができあがっているはずです(図1)。
test.htaをダブルクリックして実行すると、まずメッセージボックスが表示され、続いてシンプルな枠線のアプリケーションのような本体が立ち上がります(図2)。本体左上の「ITproへのリンク」と書かれているところはHTMLの<a>タグによるハイパーリンクです。
![]() 図2●test.htaの実行画面。最初にVBSからメッセージボックスがでて、そのあとにHTMLの表示が出る
実行画面ではIEのようにツールバーやアドレスバーは表示されず、ウィンドウ全体の印象はコマンドプロンプトに近いものがあります。HTAではVBSとJavaScriptのいずれか一方を使用するほか、混在させて使用することも可能です。サンプルのコードは単純なHTML+VBSです。VBSはIEに依存したプログラム環境ですので、拡張子.htmlで保存してもIE以外ではスクリプト部分は動きません。 サンプルのリンクをクリックするとHTAのメイン画面にリンク先は出ず、HTAとは別にIEが立ち上がってリンク先を表示します。HTAはHTMLと同等のソースコードですが、通常のHTMLとは違ってリンクをクリックしてもリンク先へ画面遷移しない初期設定になっています。この初期設定の挙動は変更できますが、変更方法は後述としましょう。まずは、初期設定でHTAがどのように振る舞うのかを把握することに努めます。
>>HTAとフォームの関係
連載新着連載目次へ >>
|