現在、VBで記述されたレガシーシステムを処理する必要があります。私はVBとASPが苦手なので、このシステムの新しいコードをJScriptで作成することにしました。
<script language="vbscript">
ただし、2つの言語間の相互運用性には問題があります。つまり、タグで宣言された関数を呼び出そうとすると、「オブジェクトが必要です」エラー(ページ言語がVBScriptの場合)で失敗します。その逆も同様です。
つまり、次のコード:
inc.asp
<script language="vbscript" runat="server">
Sub VBTestFunction(Message)
Response.Write "VBTestFunction: " & Message
End Sub
</script>
<script language="javascript" runat="server">
function JSTestFunction(Message) {
Response.Write("JSTestFunction: " + Message);
}
</script>
testjs.asp
<%@ Language="JavaScript" %>
<!-- #include file="inc.asp"-->
<script language="javascript" runat="server">
VBTestFunction("from javascript");
JSTestFunction("from javascript");
</script>
<script language="vbscript" runat="server">
Call VBTestFunction("from vbscript")
Call JSTestFunction("from vbscript")
</script>
次のエラーで失敗します:
VBTestFunction: from vbscript
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'JSTestFunction'
/test.asp, line 9
(特定の行にコメントする場合、他の3つのステートメントは正常に機能します); ページ言語をVBScriptに設定する
<%@ Language="VBScript" %>
<!-- #include file="inc.asp"-->
<script language="javascript" runat="server">
VBTestFunction("from javascript");
JSTestFunction("from javascript");
</script>
<script language="vbscript" runat="server">
Call VBTestFunction("from vbscript")
Call JSTestFunction("from vbscript")
</script>
次のエラーで失敗します:
Microsoft JScript runtime error '800a138f'
Object expected
/test.asp, line 4
(ここでも、特定の行をコメントアウトすると、他の3つのステートメントが正常に機能します)。
同じアプリケーションでのVBとJSの混合に関するMSDNの記事がありますが、この記事から、別のファイルで宣言されているように、サンプルコードはTestFunction
機能するはずであり、結局のところ関数です。
これらすべてを機能させ、VBコードとJSコードの両方から両方VBTestFunction
を呼び出す方法はありますか?JSTestFunction
あるべきだと思います。そうでなければ、JSとVBを混ぜても意味がありません。