Как передать переменную javascript в качестве аргумента функции vbscript (в контексте HTA)? - PullRequest
2 голосов
/ 27 июля 2010

Я пишу 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>

Пожалуйста, имейте в виду, что этот пример слишком упрощен - я просто попытался избавиться от всей сложности и представить вам то, что я на самом деле пытаюсь сделать.

Бонус: возможно ли запустить функцию VBScript из функции javascript? Мой HTA довольно широко использует jQuery, и было бы неплохо иметь возможность выполнять системные функции, которые мне нужно делать, из jQuery.

Ответы [ 2 ]

4 голосов
/ 27 июля 2010

Если функция определена в VBScript, ее можно выполнить из JavaScript, как если бы это была любая другая глобально доступная функция.Оба скриптовых языка имеют глобальные переменные и функции.Раньше я использовал функцию, чтобы получить доступ к MsgBox из своего кода JavaScript, используя следующее:

<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: или javascript: является распространенным заблуждением - в JavaScript строка, за которой следует двоеточие, обозначает метку , обычно сопряженную с циклами и операторами break / continue.В VBScript это просто вызвало бы ошибку.Эта путаница связана с методом запуска сценария из URL, например, в href элемента <a>:

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

В вашем примере кода предполагается, что closer - глобальная переменная, а затем обработчик событиядолжно выглядеть следующим образом:

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

Кроме того, взгляните на эту статью MSDN об использовании JScript и VBScript на одной странице .

1 голос
/ 27 июля 2010

Ваш пример должен работать, уверен, что он не выполняет то, что вы ожидаете, потому что var closer = "C:\Program Files"; должно быть var closer = "C:\\Program Files";?

...