代码之家  ›  专栏  ›  技术社区  ›  Iain Fraser

如何将javascript变量作为参数传递给vbscript函数(在HTAs上下文中)?

  •  2
  • Iain Fraser  · 技术社区  · 16 年前

    <!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中完成我需要做的系统工作,那就太好了。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Andy E    16 年前

    如果函数是在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: javascript: label 通常与循环和break/continue语句配对。在VBScript中,它只会导致一个错误。这种混淆源于从URL运行脚本的方法,例如在 <a> 元素:

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

    closer 是全局变量,则事件处理程序应如下所示:

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

    JScript and VBScript on the same page .

        2
  •  1
  •   Alex K.    16 年前

    你的例子应该行得通,但肯定没有达到你的预期,因为 var closer = "C:\Program Files"; 应该是 var closer = "C:\\Program Files";