他のホストでは暗黙のイベント バインディングを使うことができますが、そのときの構文はVBScriptとは若干異なります。JScriptの暗黙のハンドラの規則を次に示します。

Microsoft Corporation
1998年9月

要約: VBScriptとJScriptの違いについて、またそれぞれを使うべき状況について説明します(11ページ)。以下のトピックを扱います。

  • Visual InterDevにおけるVBScriptとJScriptの指定

  • インライン サーバー スクリプトと<Script>要素

  • スクリプトの実行順序

Webページを作成しているときに、何らかのスクリプトを書く必要に迫られたとします。幸いなことに、プログラマはいくつかの選択肢からスクリプティング言語を選ぶことができます。しかし、残念なことに、どの言語を使うかはプログラマが自ら決定しなくてはなりません。どうすればいいのでしょうか?

あるいは、自分が通常は使用していないスクリプティング言語で書かれた既存のスクリプトを受け継いだとします。少数の関数を追加するためだけに、そのスクリプトを学ばなくてはならないのでしょうか?

この記事ではこの2つの問題を扱います。まず、Microsoftが提供している2つのスクリプティング言語を扱うときのガイドラインをいくつか示します。

  • Microsoft® Visual Basic® , Scripting Edition(VBScript)。

  • JScript® 。これは、JScriptとJavaScriptを含むスクリプティング言語のグループの標準の定義であるECMAScriptのMicrosoftバージョンです。

他にもPerlやRexxなどのWebスクリプティング言語が存在します。しかし、ここでは、MicrosoftがInternet ExplorerとInternet Information Server(IIS)の中でActiveX® Scripting Languageエンジンを提供している2つの言語に焦点を当てることにします。

その後、同じページで両方の言語を使ったほうが良い、または使うべきであるような状況について説明します(後に述べるように、これはきわめて有効な手段です)。また、このときに注意しなくてはならないいくつかの小さな問題点についての情報を示します。

これらのトピックを扱うために、以下の事柄についても説明します。

  • VBScriptとJScriptの違い

  • Visual InterDevでスクリプティング言語を指定する方法

  • 同じページ上で両方の言語を使う方法

  • スクリプティング言語のアップデートを入手する方法

VBScriptとJScriptの違い

VBScriptとJScriptの最も明らかな違いは構文です。VBScriptはVisual Basicのサブセットであり、Visual BasicまたはVisual Basic for Applications(VBA)を使ったことがある人にはきわめてなじみが深いものでしょう。ただし、VBScriptはこれらの言語とまったく同じではありません。VBScriptはブラウザ内での動作を目的に設計されているので、ファイル アクセスや印刷など、一般にスクリプティングの範囲を超えている機能は含まれていません。

一方、JScriptはC、C++、およびJavaを含む言語グループから派生したものです。CまたはJavaを使ったことがある人には、JScriptの構文はなじみが深いものでしょう。しかし、これらの言語を知らない人にとっても、JScriptの構文は難しいものではありません。JScriptは、CとJavaの複雑さがない代わりに、これらの言語の持つ一貫性という利点を備えています。

近くの書店がコンピュータ関連書籍の棚に本をどう並べていようとも、JScriptとJavaはまったく異なる言語です。Javaは、WebアプリケーションとWeb以外のアプリケーションの両方に利用できる高機能な開発言語です。一方、JScriptは、主にWebページのスクリプティングに使われる、比較的軽量なスクリプティング言語です。

JScriptとVBScriptは、どちらも同じ目的、すなわちWebページのスクリプティングを可能にするという目的を持っています。どちらの言語も他方の言語がサポートしていない独自の機能をいくつか持っていますが、これらの違いは、必ずどちらか一方を選ばなくてはならないというほどの大きな違いではありません。

むしろ、スクリプティング言語はそれ以外の要因に基づいて選択することになるでしょう。最も大きい要因は、最も実際的なものです。つまり、その言語は、使用しようとしているプラットフォーム上でサポートされているか? クライアントとサーバーのどちらでスクリプティングを行おうとしているのか、その場合に、ユーザーが使用するブラウザとサーバー ソフトウェアはどのようなものなのか、ということです。

以下のセクションでは、この2つのスクリプティング言語についてさらに詳しく説明し、どちらかを選択するときの状況別のガイドラインをいくつか示します。

VBScriptを選ぶべき状況

VBScriptは主にMicrosoftプラットフォーム上でサポートされています。このペーパーを執筆している時点では、VBScriptを使用するためには以下のどちらかを使用している必要があります。

  • サーバー スクリプト。 VBScriptを(ASPページの中で)サーバー スクリプトとして使用したい場合、サーバーはMicrosoft Internet Information Server(IIS)か、これに相当するサードパーティ プロダクトでなくてはなりません。

  • クライアント スクリプト。 VBScriptをブラウザ スクリプトの中で使用したい場合、ブラウザはInternet Explorerのいずれかのバージョンでなくてはなりません。他のポピュラーなブラウザはVBScriptをサポートしていないことがあります。

Visual InterDevユーザーであれば、すでにIIS(またはこれに相当するサーバー)を使用しているでしょうから、サーバー スクリプトでのVBScriptの使用は問題なく行えます。IISを使用していない場合には、サーバーがVBScriptをサポートしているかどうかを確認してください。

一方、クライアント スクリプトにInternet Explorerしか使えないという制約は、ユーザーが使用するブラウザをコントロールできないパブリックなWebサイトを作成している場合には問題となります。このため、クライアント スクリプトでのVBScriptの使用は、企業内のイントラネットのように、ユーザーが使用するブラウザがわかっている場合にのみ実用的です。

ターゲット プラットフォームがVBScriptをサポートできることを確認したら、以下の要因を考慮して、個々のスクリプトをVBScriptで書くべきかどうかを決定します。

  • エラー処理。 VBScriptは、例外処理のためのOn Error Resume Nextステートメントを持っています。サーバー スクリプトを書くときには、スクリプトは無人状態で実行されるので、エラー処理が特に重要となります。

  • フォーマッティング。 VBScriptには、日付、数値、および金額データを簡単にフォーマットできる関数が含まれています。

  • Internet Explorerでの簡単なイベント処理。 Visual Basicと同様に、VBScriptではButton1_onclickのようにobject_eventの構文を使って関数に名前を付けるだけで「暗黙」のイベント ハンドラを作成することができます。Internet Explorerでは、この機能はJScriptでは使用できません(ただし他のJScriptホストではサポートされています)。

JScriptを選ぶべき状況

JScriptはスクリプティングが可能なほぼすべてのブラウザでサポートされています。したがって、パブリックWebサイトのための、幅広いユーザーを対象としたアプリケーションを作成するときには、当然クライアント スクリプティングにJScriptを選ぶべきでしょう。また、JScript(およびその親戚のJavaScript)は広く使われている標準的なスクリプティング言語なので、書店とWebの両方にさまざまな参考資料があります。

サーバー スクリプトにJScriptを使う場合には、サーバーがそれをサポートしていることを確認してください。Microsoft IISではASPページのスクリプティングでJScriptをサポートしていますが、すべてのサーバーがサポートしているわけではありません。

JScriptを選択すべきかどうかに影響を与える可能性のあるその他の要因としては次のものがあります。

  • 動的な実行。 JScriptには、スクリプトの中からスクリプトを作成して実行したり、式を動的に評価するというきわめて強力な機能があります。簡単に述べると、スクリプトがスクリプトを作成できるのです。この機能はDHTMLを扱うときに便利です。これにより、DHTMLドキュメント モデルを動的に操作できるからです。

  • オブジェクト指向。 JScriptは、スクリプトの中でオブジェクトの定義を行える、プロトタイプ ベースのオブジェクト構造を使用しています。オブジェクトのプロトタイプのメソッドとプロパティを追加することで、組み込みオブジェクトとカスタム作成のオブジェクトの両方を拡張することができます。

JScriptを使うときの注意を1つ。Visual BasicやVBScriptしか使ったことのない人には慣れるのが難しいかもしれませんが、JScriptでは大文字と小文字が区別されます。

また、JScriptを初めて使用する人は、この言語でイベント ハンドラを作成する方法を学ぶべきでしょう。Internet ExplorerのJScriptでは、オブジェクトとそれに関連付けられたイベント ハンドラを明示的にリンクする必要があります。一般に、これはオブジェクト タグの中で、イベントとそのバインド先のハンドラ関数を識別する属性を指定することによって行います。次に例を示します。

  <BUTTON ID="btnSave" LANGUAGE="JavaScript" onclick="btnSave_onclick()"> 

FakePre-175a51a3aa1d419ca2da3eee24364e94-7dbbde591a9b43f5ae9b9db3d2c66b85

どちらの例でもLANGUAGE属性が"JavaScript"に設定されていることに注意してください。Internet Explorerは"JScript"と"JavaScript"の両方の名前をサポートしていますが、他の多くのブラウザは"JavaScript"は理解するにせよ、"JScript"は理解しません。安全を期すために、ページがInternet Explorerで表示されるという確信がない場合には"JavaScript"を使うようにしてください。

JScriptでのイベント ハンドラの作成の詳細については、MSDN Library OnlineのMicrosoft Visual InterDev™ のドキュメンテーションを参照してください(MSDN Library OnlineへのアクセスにはMSDN Online Membershipが必要です。これは無償ですが、短時間で終わる1回限りの登録プロセスを実行する必要があります)。

↑ 戻る

Visual InterDevでスクリプティング言語を指定する方法

どのスクリプティング言語を使用するにせよ、ホストがスクリプトを処理するためにどのスクリプティング エンジンを使えばいいのかを判断できるように、言語を指定する必要があります。このための方法は、インライン サーバー スクリプトと<SCRIPT>ブロック(クライアント スクリプトとサーバー スクリプトの両方)のどちらを使用するのか、またどのバージョンのVisual InterDevを使用しているのかによって異なります。

インライン サーバー スクリプトの言語の設定

IISとASPページを使用する場合には、インライン スクリプト(<% %>デリミタに囲まれたスクリプト)と、<SCRIPT>要素の中のスクリプトの2つのタイプのサーバー スクリプトを書くことができます。一般に、インライン スクリプトでは、スクリプティングの結果を、ページのHTMLストリームにフィードすることができます。一方、<SCRIPT>要素の中のスクリプトは、インライン スクリプトから呼び出される関数とサブルーチンを作成するために使用されます。

   インライン スクリプトとして動作するスクリプトを<SCRIPT>要素の中に作成することができます。つまり、スクリプト ステートメントが関数またはサブルーチンの一部ではないような場合です。しかし、この方法は勧められません。詳細については、この記事の「サーバー スクリプトの実行順序」の項を参照してください。

<SCRIPT>要素の言語の設定は、サーバー スクリプトとクライアント スクリプトのどちらでも同じです。詳細については、この記事の「<SCRIPT>要素の言語の設定」の項を参照してください。

ページ上のすべてのインライン スクリプトは1つの言語で書かれていなくてはなりません。新しいASPページを作成すると、そのページにはインライン スクリプトのスクリプティング言語を設定する@ディレクティブが自動的に追加されます。@ディレクティブは次の形式を持ちます。

  
    <%@ Language="VBScript" %>
     
  

@ディレクティブはページ上の最初のインライン スクリプト コマンドでなくてはなりません。このディレクティブがないと、IISは既定時にVBScriptをインライン スクリプティング言語として使用します。

ページのインライン スクリプティング言語を変更するには

  • Visual InterDev 1.0では、ページを編集し、ディレクティブが"JavaScript"などの新しい言語を指定するように変更します。

  • Visual InterDev 6.0では、ページを右クリックし、ページの[プロパティ]ダイアログ ボックスを表示します。その後、[Default scripting language]の下の[Server]ボックスで新しい言語を選択します。変更を適用すると、エディタは@ディレクティブを適切な言語に更新します。また、@ディレクティブを手作業で編集することも可能です。

さらに、すべての新規のASPページに適用される既定値を変更することもできます。この変更は、既存のページは更新しませんが、それ以降に作成されるすべてのページで有効になります。

インライン スクリプトの既定の言語を変更するには

  • Visual InterDev 1.0では、[Tools]メニューの[Options]を選択し、[HTML]タブを選択します。[Active Server Pages]の下の[Default scripting language]エリアで言語を選択します。

  • Visual InterDev 6.0では、プロジェクト エクスプローラでプロジェクトの名前を右クリックし、[Properties]を選択します。[Editor Defaults]タブを選択し、[Default script language]の下で新しい既定値を選択します。

<SCRIPT>要素の言語の設定

インライン サーバー スクリプトとは異なり、<SCRIPT>要素では、同じページ上でも複数のスクリプティング言語を使用することができます。あるブロックをVBScriptで作成し、別のブロックをJScriptで作成することができます(すべてのプラットフォームがVBScriptをサポートしているわけではない点に注意してください)。

同じページ上でスクリプティング言語を混在させるときの注意事項については、この記事の「同じページ上で両方の言語を使う方法」の項を参照してください。

<SCRIPT>要素の言語を指定するには

  • <SCRIPT>タグに、使用したい言語を指定するLANGUAGE要素を追加します。たとえば、次の<SCRIPT>タグは、その<SCRIPT>要素の中のすべてのスクリプトがJScriptで書かれることを指定します。
    
    <SCRIPT LANGUAGE="JavaScript">
    function test(){
    alert("testing");
    }
    </SCRIPT>
**注**   IISのサーバー スクリプトではLANGUAGE属性は必須です。一方、クライアント スクリプトではオプションです。LANGUAGE属性がなかった場合、プロセッサは既定のスクリプティング言語を使用します。Internet Explorerのクライアント スクリプトでは、既定値は一般に最初の\<SCRIPT\>要素の言語であり、言語が指定されていない場合はJScriptです。ただし、既定値に頼ることはせず、\<SCRIPT\>要素の言語をつねに明示的に設定するようにすることが勧められます。

1つの<SCRIPT>要素の中でVBScriptとJScriptを混在させることはできません。両方の言語を使用したい場合には、ページ内に(少なくとも)2つの<SCRIPT>要素がなくてはなりません。

Visual InterDev 1.0とVisual InterDev 6.0は、どちらもスクリプトを自動生成するツールを持っています。Visual InterDev 1.0ではScript Wizardを使ってスクリプトを生成できます。Visual InterDev 6.0には、次の2つのスクリプト生成ツールがあります。

  • ページの右クリック メニューの[Script Block]コマンドは、クリックした場所にスケルトンの<SCRIPT>要素を挿入します。

  • Script Outlineは、イベントの名前をダブルクリックしたときに、スケルトンのイベント ハンドラを作成します。

各種のスクリプト生成ツールは、ユーザーが行った設定に基づいて、どの言語を使用するかを決定します。スクリプティング ツールの既定の言語は個々のページで変更することができます。

Visual InterDev 1.0のScript Wizardが使用する言語を設定するには

  • [Tools]メニューの[Options]を選択し、[HTML]タブを選択します。[Script Wizard]の[Default scripting language]エリアで言語を選択します。

Visual InterDev 6.0のスクリプト生成ツールが使用する言語を1つのページで設定するには

  • ページを右クリックし、ページの[Properties]ダイアログ ボックスを表示します。その後、[Default scripting language]の下で新しい言語を選択します。サーバー スクリプト ブロックとクライアント スクリプト ブロックの両方の言語を設定することができます。

サーバー スクリプト ブロックの生成に使われる設定は、インライン スクリプトの言語の設定にも使用されます。インライン スクリプトに一方の言語を使用し、サーバー スクリプト ブロックを生成するツールでもう一方の言語を使用したい場合には、どちらかの言語を手作業で変更する必要があります。

また、プロジェクトの既定値を変更しておけば、それ以降作成するすべてのページで、スクリプティング ツールに使用する言語の既定値が最初から設定された状態になります。

Visual InterDev 6.0プロジェクトのスクリプト生成ツールが使用する既定の言語を変更するには

  • プロジェクト エクスプローラでプロジェクトの名前を右クリックし、[Properties]を選択します。[Editor Defaults]タブを選択し、[Default script language]の下で新しい既定値を選択します。

サーバー スクリプト ブロックの生成に使われる設定は、インライン スクリプトの言語の設定にも使用されます。インライン スクリプトに一方の言語を使用し、サーバー スクリプト ブロックを生成するツールでもう一方の言語を使用したい場合には、どちらかの言語を手作業で変更する必要があります。

Visual InterDev 6.0のスクリプト生成ツールの詳細については、MSDN Library OnlineのVisual InterDev 6.0ドキュメンテーションのトピック"Choosing a Scripting Language"と"Handling Events with HTML Elements"を参照してください。

↑ 戻る

同じページ上で両方の言語を使う方法

すでに述べたように、同じページ上で両方のスクリプティング言語を使うことができます。復習しておきましょう。同じページ上で両方の言語を使うのはどのような場合でしょうか? 次の2つが考えられます。

  • 1つのルーチンで一方の言語に固有の機能を使いたいが、スクリプトの他の部分はもう一方の言語で作成したい。

  • 生成されたコードが、自分の好きな言語でない場合。たとえば、デザインタイム コントロールはJScriptのコードを生成するのに、プログラマはVBScriptを使いたいと思うような場合です。

ほとんどの場合、同じページ上でのスクリプティング言語の混在は何の問題もなく行えます。一方の言語で書かれたスクリプトはもう一方の言語のルーチンを呼び出すことができますし、もう一方の言語のスクリプトとグローバル変数を共有することができます。ただし、以下に説明するように、状況によってはいくつかの問題が生じることがあります。

VBScript呼び出しでの括弧の使用

VBScriptからJScriptの関数を呼び出すときには、関数がパラメータを必要としない場合でも、呼び出しに必ず括弧を付けます。次に関数呼び出しの例を示します。

  
    retVal = callJSFunction()

括弧を付けないと、関数の戻り値はプログラマが期待するものとは異なり、関数そのものを含んでいるオブジェクトとなります!

サーバー スクリプトの実行順序

インライン サーバー スクリプトは上から下へシーケンシャルに実行されます。サーバー スクリプトの中では呼び出し可能なルーチン(関数またはサブルーチン)を定義し、必要に応じて呼び出すことができます。

すべてのインライン スクリプトは同じ言語で、つまりページの先頭の@ディレクティブで指定された言語で書かれていなくてはなりません。このため、インライン スクリプトではスクリプティング言語を混在させることはできません。

ここで読者は「ちょっと待ってくれ」と言いたくなるかもしれません。理論的には、<SCRIPT>要素にインライン的なスクリプトを入れることが可能です。つまり、次の例のように、要素の中に、関数やサブルーチンの一部でないスクリプトを入れることができるはずです。

  
    <% Response.Write("Some inline script<BR>")%>
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Response.Write("Script in a SCRIPT element<BR>")
</SCRIPT>
     
  

たしかにこれは可能です。しかし、この場合には、IIS ASPプロセッサの実行順序に運命を握られます。たとえば、作成したサーバー スクリプトをIIS 4.0で実行した場合の実行順序は次のようになります。

  1. <SCRIPT>要素の中の、既定以外の言語のスクリプト

  2. インライン スクリプト

  3. <SCRIPT>要素の中の、既定の言語のスクリプト

この順序はActiveX言語エンジンのロード シーケンスに大きく依存しており、IISのASPプロセッサは将来のリリースでは変更される可能性があるので、われわれはこのシーケンスに依存しないようにすることを強くお勧めします。<SCRIPT>要素は関数やサブルーチンに、または実行シーケンスに依存しないコード(そんなコードは存在するのでしょうか?)にのみ使用するようにしてください。

スクリプト ブロックの順序

言語を混在させる場合には、ページ内の<SCRIPT>ブロックの順序がそれらの動作に影響を与えることがあります。次に、インラインのVBScriptスクリプトがJScriptで書かれた関数を呼び出す単純な例を示します。

  
    <SCRIPT LANGUAGE="VBScript">
    ' Calls a JScript function
    aNumber = 2
    doubledNumber = doubleMe(aNumber)
    document.write("The answer is " & doubledNumber)
</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">
function doubleMe(aNumber){
    return aNumber * 2;
}
</SCRIPT>
     
  

これは動作しません。具体的に言うと、 document.writeステートメントはページに空の文字列を書き込みます。なぜでしょうか? VBScriptブロックが処理される時点で、その後にあるJScriptの<SCRIPT>ブロックの読み込みと解析がまだ行われておらず、ページ内で使用可能な状態になっていないからです。ブラウザは、ページ内のスクリプト ブロックを処理するときには、上から下の順番で処理を行います。

この例では、スクリプト ブロックの順序を逆にするだけで問題が解決されます。実際、この種のシナリオはそれほど一般的ではありません。ほとんどの場合、<SCRIPT>ブロックは、ページが完全にロードされ、すべての要素が利用可能になるまでは呼び出されない関数とサブルーチンを含んでいるからです。しかし、ページがリニアに処理され、異なる言語で書かれた<SCRIPT>ブロックは別々に処理されるということを念頭に置いておくことをお勧めします。

大文字/小文字の区別と名前付け規約

JScriptは大文字と小文字を区別します。すべてのJScriptキーワードだけでなく、JScriptの名前空間の中のすべてのものについて、大文字と小文字を正しい組み合わせで使用しなくてはなりません。これには、使用するすべてのオブジェクト モデルの中のすべてのキーワードが含まれます。たとえば、ASPのResponseオブジェクトを使用する場合には、大文字と小文字の区別を正確に行わないと(たとえば Response.Write)、JScriptはそのようなオブジェクトは存在しないと思いこみます。同じように、DHTMLの onclickイベントのハンドラを作成する場合、JScriptはVisual Basicでよく使われるスタイル( Onclick)を認識しません。

もちろん、VBScriptは大文字と小文字を区別しません。これは、VBScriptを使ってJScriptで書かれた要素にアクセスするときにも、ある程度まで当てはまります。次に示す単純な例は2つのスクリプトを含んでいます。第1のスクリプトはJScriptで書かれており、グローバル変数( ctr)と、単純な小さな関数(doubleMe)を含んでいます。第2のスクリプトはVBScriptで書かれたボタン ハンドラで、JScript関数を呼び出し、グローバル変数の値を報告します。

  
    
<SCRIPT LANGUAGE=javascript>
var ctr;
function doubleMe(aNumber){
    // Initialize value of global counter
    if(parseInt(ctr)){
        ctr = ctr + 1;}
    else{
        ctr = 1;
    }
    return aNumber * 2;
}
</SCRIPT>

<SCRIPT LANGUAGE="vbscript">
Function btn1_onclick()
    numberToDouble = 12
    alert("The doubled number = " & DoubleMe(numberToDouble))
    alert("You have doubled the number " & Ctr & " times.")
End function
</SCRIPT>
     
  

VBScriptのスクリプトでは、doubleMe関数とctr変数を呼び出すときに、わざと大文字と小文字を正しく使っていませんが、この例は正常に動作します。

これはいいニュースです。悪いニュースは、大文字と小文字の区別を意識しなければならない状況がいくつかあるということです。

  • JScriptが、大文字と小文字の違いだけによって区別されるような複数の要素を含んでいるページ上にある場合。たとえば、**Timer()**という名前の関数と、timerという名前のグローバル変数があるような場合です。これはコーディング上の習慣として望ましくないかもしれませんが、既存のコードを含んでいるページを扱わなければならないこともあるでしょう。

  • JScript要素の名前を、関数呼び出しの文字列パラメータとして渡す場合。

JScriptに大文字と小文字の違いだけで区別される要素が含まれている場合にも、VBScriptはそれらを通常どおりに(つまり大文字と小文字の区別なしで)参照することができます。ただし、VBScriptは、大文字と小文字を区別しないで、ページ上で最初にマッチしたJScript要素だけを認識します。たとえば、VBScriptが先に**Timer()**という名前の関数を発見したら、timerという名前のグローバル変数は見つけることはできません。これは、プログラマがVBScriptコードの中で両者を慎重に区別していても変わりません。VBScriptはこれらの名前を、すべてが大文字(または小文字)で書かれた名前と同じように扱うからです。残念なことに、この問題は、(可能であれば)JScriptコードを変更することでしか回避できないので、この要素間の微妙な区別に頼らないコードを書くようにしてください。

要素名をパラメータとして渡すときの問題は、特殊な状況でしか発生しません。Visual InterDev 6.0のスクリプティング オブジェクト モデルは、そのような状況の一例です。ここでは例としてこのスクリプティング オブジェクト モデルを取り上げますが、この問題は基本的には、これに似たデザインを使用するときにはいつでも生じる可能性があります。

Visual InterDev 6.0のスクリプティング オブジェクト モデルはすべてJScriptで書かれています。プログラマはVBScriptでコードを書いて、VBScriptの大文字/小文字の規約を使ってスクリプティング オブジェクト モデルを操作することができます。しかし、メソッド呼び出しを直接には行わないような場合もあります。メソッドの名前をJScript関数に渡し、その関数にメソッドを呼び出させるような場合です。

そのいい例はadviseメソッドです。このメソッドを使うと、特定のメソッドを特定のイベントにバインドすることができます。このメソッドを呼び出すときには、イベントが発火したときに呼び出されるメソッドの名前を渡します。次のコードは、ボタンのonmouseoverイベントをchangecaption()イベント ハンドラにバインドしています。

  <SCRIPT LANGUAGE="VBScript">Function setAdviseMethods()
    Btn1.advise("onmouseover", "changecaption()")
End Function
</SCRIPT> 

これらの名前はJScript関数に文字列として渡しているので、大文字と小文字は正しく区別する必要があります。JScriptは後に独自の大文字/小文字の規則を使って名前の評価を行うので、大文字と小文字が正しく使われていなければ、例のごとく名前の発見に失敗します。

VBScriptからJScriptへの配列の受け渡し

VBScriptルーチンは、パラメータの1つとして、または戻り値の1つとして配列の受け渡しを行うことがあります。プログラマはこのようなルーチンをJScriptから呼び出すことができますが、VBScriptの配列を、使用可能なJScriptの配列に変換しなくてはなりません。このためには、JScript関数で VBArrayオブジェクトを作成し、toArrayを使ってJScriptの配列に変換します。

JScriptは多次元配列をサポートしていないので、元のVBScript配列が多次元配列だった場合、toArrayメソッドはこれを1次元のJScript配列に変換します。

次に示す、配列とJScriptスクリプトを作成するVBScriptは、配列を取得し、使用する方法を示しています。

  
    <SCRIPT LANGUAGE="VBSCRIPT">
Function makeArrayVB()
    ' Creates a VBScript array
    dim anArray(1,1)
    anArray(0,0) = "0,0"
    anArray(0,1) = "0,1"
    anArray(1,0) = "1,0"
    anArray(1,1) = "1,1"
    makeArrayVB = anArray
End Function

<SCRIPT LANGUAGE="JavaScript">
// Accesses a VBScript array within a JScript script
function getVBArray(){
    var arrayObj;
    var jsArray;
    arrayObj = makeArrayVB();
    jsArray = VBArray(arrayObj).toArray();
    alert("VBScript array length = " + jsArray.length);
    // Displays the contents of the array
    for(i=1;i<=jsArray.length;i++){
       alert(jsArray[i-1]);
    }
}
</SCRIPT>
     
  

残念ながら、現在のVBScriptリリース(4.0)では、この逆は行えません。つまりJScript配列をVBScript配列に変換することはできません。配列を渡すJScriptルーチンを扱う方法としては、以下の選択肢があります。

  • 呼び出し側のルーチンもJScriptで書く。

  • JScriptルーチンをVBScriptで書き直す。

  • 可能ならば、JScript配列を変更して、VBScriptが処理できる別の構造(デリミタで区切られた文字列など)を渡すようにする。たとえば、toString関数を使うと、配列をカンマ区切りの文字列に変換することができます。その後、VBScriptでSplit関数を使えば、個々の要素を取り出せます。明らかに、これは多くのケースでは現実的な解決策ではありませんが、場合によっては有効なことがあります。

↑ 戻る

スクリプティング言語のアップデートを入手する方法

VBScriptとJScriptは静的な言語ではありません。どちらの言語エンジンも定期的にアップデートされており、新機能が追加されたり、発見された「異常動作」への対処が行われたりしています。どちらの言語も実際にはActiveXコンポーネントとしてインプリメントされているので、アップデートは通常のコントロールと同じようにして行えます。新しい言語エンジンをインストールすれば、そのエンジンを呼び出すすべてのアプリケーション(Internet ExplorerやVisual InterDevなど)は、スクリプトを実行するときになったら新しいエンジンを自動的に呼び出します。

言語エンジンの現状、アップデートの入手、およびスクリプティング一般に関する詳しい情報については、Microsoft Scripting Webサイト(https://msdn.microsoft.com/scripting/)を参照してください。では、スクリプティングの冒険を存分に楽しんでください!

↑ 戻る