2012年11月22日木曜日

IE で VBScript が動かない!?

かつて、ブラウザの対話性向上の切り札として幅広く利用された Java アプレットという技術がありました。Write once, run anywhere をスローガンに、幅広いプラットフォームでの実行可能性を秘めた Java は当時の IT バブルの波に乗り、ウォール街では「すべてが Java で書き換えられる。数年以内にマグナカルタでさえも Java で書き換えられるだろう」などと言われたそうです。

ちょうどそのころ、Windows 95 と Office 製品の爆発的大ヒットに支えられたマイクロソフトは、同社の Internet Explorer 向けの対話性向上技術として ActiveX コンポーネントをリリースしました。ActiveX コンポーネントは Windows 向けの RAD 開発環境として幅広く支持された Visual Basic でも開発できたため、主に Office のマクロ開発環境として利用されていた Visual Basic for Applications (VBA)や、IE 上で動作するスクリプト言語である VBScript と合わせ、Microsoft プラットフォーム上では Visual Basic 系言語が全盛時代を迎えます。レッドモンドでは「合衆国憲法だって BASIC で書ける。そう、Bill Gates ならね」などと言われたとか、言われなかったとか。

余談ですが、ActiveX はマーケティング用語として登場しただけの話であって、要は OLE 、もう少し低レベルでいうと COM のことでした。IDispatch インターフェイスをサポートした COM コンポーネントは、Visual Basic、VBA、VBScript から利用する事が出来ました。

また、VBScript は ActiveX スクリプティング(Active スクリプト)をサポートするスクリプト言語のひとつとして実装されました。実際には IE や Windows Scripting Host(WSH)、Active Server Pages (ASP)といった実行環境上で動作する共通ランタイムの上に VBScript インタープリタが実装されており、同ランタイム上には Microsoft 版の JavaScript である JScript インタープリタも実装されていました。この「実行環境と実装言語を切り離す」という考え方は、現在の .NET 環境にも脈々と受け継がれている気がします。

ActiveX という言葉は完全に死語になりましたが、その膨大な資産は今でもサポートされ続けています。

あれから 20 年近くを経た現在、Microsoft プラットフォームでの主なソフトウェア開発環境は .NET Framework にとってかわられ、往年の Visual Basic の地位は C# にとってかわられようとしています(もちろん、Visual Basic も .NET 環境で動作しますが)。

ふと、手元の Windows Phone での旧 VB 系に対するサポートが気になったので、調べてみたところ、以下の文書がヒットしました。

Web development for Windows Phone

そう、Windows Phone 上の IE (IE 9 がベース)では、VBScript はサポート対象外なのです。

以下のような静的 Web ページを作ってテストしてみました。

   1: <html>
   2:     <head>
   3:         <title>タイトル</title>
   4:         <script language="vbscript">
   1:  
   2: Sub Test()
   3:  
   4:     document.getElementById("target").innerText = "うまくいったね!"
   5:     window.alert "テスト!"
   6:  
   7: End Sub
   8:         
</script>
   5:     </head>
   6:     <body>
   7:         <p>テスト中です。</p>
   8:         <p id="target">うまくいくかな?</p>
   9:         <input type="button" onclick="Test" value="Test"/>
  10:     </body>
  11: </html>


Windows 7 上の IE 9 では正しく動作しましたが、Windows Phone ではスクリプトはまったく動作しませんでした。


さらに、Windows 8 上の IE 10 でも無反応。デスクトップ版 IE では HTML ソース中に



   1: <meta http-equiv="x-ua-compatible" content="IE=7">


を挿入することで互換表示が強制されて正しく動作しましたが、ストアアプリ版 IE ではまったく無反応のままでした。


クロス ブラウザという観点では全く普及しなかった IE 上の VBScript 利用でしたが、企業内システム(いわゆるイントラネット)向け Web アプリケーションのクライアント側スクリプト言語として利用されたケースがあるかもしれません。残念ですが、これらのアプリケーションは最新 OS ではまともに動作しないことになりそうです。


そもそも JavaScript (JScript)ではなく VBScript を使う理由があったのか?という問題ですし、個人的に業務システムで VBScript を全面的に採用したことはありませんでしたが、唯一、多様な表示(「はい」「いいえ」「キャンセル」などのボタンや各種アイコン)をサポートする MsgBox メソッドだけは捨てがたかったと思います。


今回は C# とはほぼ無縁の話題でした。

0 件のコメント:

コメントを投稿