从vbscript调用javascript函数

从vbscript调用javascript函数,javascript,php,jquery,vbscript,hta,Javascript,Php,Jquery,Vbscript,Hta,编写一个hta应用程序,将数据从基于php的网页加载到oracle表单。需要使用sendkeys,它在任何js框架中都不可用(selenium中也不可用)。这就是我将jquery与vbscript混合使用的原因。这很简单,但不起作用 <script language="VBScript"> Function startDataLoad() MsgBox ("Starting Data Load") DataLoad End Functi

编写一个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>

函数startDataLoad()
MsgBox(“启动数据加载”)
数据加载
端函数
子数据加载()
昏暗的地狱
设置objShell=CreateObject(“WScript.Shell”)
objShell.AppActivate(“Oracle应用程序-开发”)
暗淡的DTWAIT
Dim数据阵列
dataArray=find_all_selected()
对于dataArray中的每个x
objShell.SendKeys(x)
如果(x=“^s”),则
dteWait_l=DateAdd(“s”,0.03,Now())
直到(现在()>dteWait_l)
环
如果结束
下一个
objShell.SendKeys(“^s”)
端接头
函数find_all_selected(){
var数据加载程序a=[];
$('body')。查找('input:checked')。每个(函数(){
当前数据=$(this).最近的('.parent').find('li.data_loader_val').data('data_loader').split('124;');
数据加载程序推送(当前数据);
});
返回数据加载程序;
}
感谢您提供的任何帮助

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

如果您的JScript函数根本没有被调用,或者SendKeys无效,那么您需要显示一个简化但可执行的.hta的代码

如果所有其他的工作都有效,但是从JScript函数返回的(j(ava)脚本)数组不能在VBScript代码中使用,请考虑使用.Net ARAYLIST作为集合。在(最低限度)代码中:

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

<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>
=>

您可以尝试一下,尽管我承认我不知道它“工作”的原因。

在HTA应用程序上:

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

样本:

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

调用find_all_selected()
要从Javascript调用VBScript子脚本,请执行以下操作:

样本:

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

数据加载();

记住大多数浏览器都不支持vbscript……您是如何将JQuery连接到hta的?我没有看到
$
的任何定义。将完整的jquery.min.js代码放在hta中,或者使用
标记链接它。顺便说一句,通常使用
.SendKeys()
是非常不可靠的,这是最糟糕的方法。嘿..谢谢..读了你的帖子后,我意识到我正在从java脚本发送一个二维数组,并试图在vbscript中将其用作一维数组…另一个问题,在vbscript中,我没有将其定义为数组…现在我得到了一个工作版本,即如果我返回数据\u loader\u a[0]并在vbscript中使用它,那么它就工作了..但是如果我返回数据\u loader\u a并使用两个“for each”查看vbscript标记答案,因为这个概念和两个链接帮助我得到了我想要的..谢谢。。
<script language="VBScript">
    call find_all_selected()
</script>
<script language="javascript">
    DataLoad();
</script>