2

HTA を作成していて、Javascript にある変数を VBScript 関数に渡す必要があります。これを行う方法を教えてください。これが私がやろうとしていることの(非動作)例です:

<!DOCTYPE ... >
<html>
<head>    
    <HTA:APPLICATION ID="chrome" APPLICATIONNAME="kiosk" ... />
    ...
    <script type="text/javascript">
        ...
        var closer =  "C:\Program Files";
        ...
    </script>
    <script language="VBScript" src="close.vbs"></script>
</head>
<body>
<a href="#" onClick="VBScript:CloseExplorerWindow(window.closer)">close</a>
</body>
</html>

この例は単純化しすぎていることに注意してください。すべての複雑さを取り除いて、実際に何をしようとしているのかを説明しただけです。

おまけ: JavaScript 関数から VBScript 関数を起動することは可能ですか? 私の HTA は jQuery を非常に広範囲に使用しており、必要なシステム処理を jQuery 内で実行できると便利です。

4

2 に答える 2

4

関数が VBScript で定義されている場合は、他のグローバルに使用可能な関数であるかのように、JavaScript から実行できます。どちらのスクリプト言語も、グローバル変数と関数を共有しています。以下を使用して JavaScript コードから MsgBox にアクセスできるように、以前は関数を使用していました。

<script type="text/vbscript">
Function vbsMsgBox (prompt, buttons, title)
    vbsMsgBox = MsgBox(prompt, buttons, title)
End Function
</script>
<script type="text/javascript">
vbsMsgBox("This is a test", 16, "Test");
</script>

これらのスクリプトを混在させる場合は、含める順序が重要です。ページの最初のスクリプトが vbscript の場合、それがイベント ハンドラーの既定のスクリプト エンジンになります。最初が JavaScript の場合、それがデフォルトになります。vbscript:orを提供するjavascript:というのはよくある誤解です。JavaScript では、文字列の後にコロンが続く文字列は、一般的にループや break/continue ステートメントと対になっているラベルを示します。VBScript では、エラーが発生するだけです。<a>この混乱は、要素の href など、URL からスクリプトを実行する方法に起因します。

<a href="javascript:doSomething(); void(0);">do something</a>

サンプル コードでcloserは、 がグローバル変数であると仮定すると、イベント ハンドラーは次のようになります。

<a href="#" onclick="CloseExplorerWindow(closer)">close</a>

また、同じページでの JScript と VBScript の使用に関する MSDN の記事もご覧ください。

于 2010-07-27T10:33:23.953 に答える
1

var closer = "C:\Program Files"; あなたの例はうまくいくはずvar closer = "C:\\Program Files";です、それがあなたが期待することをしていないことを確認してください。

于 2010-07-27T10:37:19.060 に答える