从vbscript调用javascript函数

时间:2015-03-13 10:42:11

标签: javascript php jquery vbscript hta

编写一个hta应用程序,将数据从基于php的网页加载到oracle表单。需要使用sendkeys,它在任何js框架中都不可用(也不在selenium中)。这就是我将jquery与vbscript混合的原因。它很简单但不起作用

<script language="VBScript">
    Function startDataLoad()
        MsgBox ("Starting Data Load")
        DataLoad
    End Function

    Sub DataLoad()
        Dim objShell, WshShell
        Set objShell = CreateObject("WScript.Shell")
        objShell.AppActivate ("Oracle Applications - DEV ")
        Dim dteWait

        Dim dataArray
        dataArray = find_all_selected()

        For Each x In dataArray
        objShell.SendKeys (x)
        If (x = "^s") Then
        dteWait_l = DateAdd("s", 0.03, Now())
        Do Until (Now() > dteWait_l)
        Loop
        End If
        Next

        objShell.SendKeys ("^s")

    End Sub
</script>

<script language="javascript">
    function find_all_selected() {
        var data_loader_a = [];
        $('body').find('input:checked').each(function () {
            current_data = $(this).closest('.parent ').find('li.data_loader_val').data('data_loader').split('|');
            data_loader_a.push(current_data);
        });
        return data_loader_a;
    }
</script>

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

“不工作”不能作为问题描述 - 您需要描述实际与预期的行为并详细发布错误消息。

如果根本没有调用JScript函数,或者SendKeys没有效果,则需要显示简化但可执行的.hta的代码。

如果其他所有“有效”,但从JScript函数返回的(J(ava)Script)数组不能在VBScript代码中使用,请考虑使用.NET ArrayList作为集合。在(简约)代码中:

<html>
 <head>

  <title>PingPong</title>
  <HTA:APPLICATION ID="PingPong"></HTA>

  <SCRIPT LANGUAGE="VBScript">
   Sub Window_onLoad()
     Dim al : Set al = getAL()
     Dim e
     For Each e In al
         MsgBox e
     Next
   End Sub
  </SCRIPT>

  <SCRIPT LANGUAGE="JScript">
   function getAL() {
     var al = new ActiveXObject("System.Collections.ArrayList");
     al.Add("one");
     al.Add("two");
     return al;
   }
  </SCRIPT>

 </head>
 <body>
 </body>
</html>

第二个想法:

基于来自herehere的信息,我始终认为您无法在VBScript中使用JScript数组:

There is currently no way to convert a JavaScript array into a VBArray.

但是在编写了我的测试/演示代码之后,我忍不住再试一次:

<html>
 <head>

  <title>PingPong</title>
  <HTA:APPLICATION ID="PingPong"></HTA>

  <SCRIPT LANGUAGE="VBScript">
   Sub Window_onLoad()
     Dim al : Set al = getAL() ' <-- the Set is required
     Dim e
     For Each e In al
         MsgBox e
     Next
     MsgBox TypeName(al)
   ' MsgBox al(0) will fail
   End Sub
  </SCRIPT>

  <SCRIPT LANGUAGE="JScript">
   function getAL() {
/* let's keep it simple
     var al = new ActiveXObject("System.Collections.ArrayList");
     al.Add("one");
     al.Add("two");
*/
     return ["zero", "one", "two"]; // al;
   }
  </SCRIPT>

 </head>
 <body>
 </body>
</html>

因此,使用Set / as Object获取JScript(literal)数组使得该集合可用于For Each。因为这只意味着你的一个变化 代码:

dataArray = find_all_selected()

=&GT;

Set dataArray = find_all_selected()

你可以尝试一下,尽管我承认我不知道为什么它“有效”。

答案 1 :(得分:0)

在HTA应用程序上:

要从VBScript调用Javascript函数,请使用“调用”:

示例:

<script language="VBScript">
    call find_all_selected()
</script>

要通过Java脚本调用VBScript Sub,请执行以下操作:

示例:

<script language="javascript">
    DataLoad();
</script>