从 vbscript 调用 javascript 函数
calling javascript function from vbscript
编写 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>
感谢任何帮助
"Not working" 不能用作问题描述 - 您需要描述实际行为与预期行为并详细发布错误消息。
如果你的 JScript 函数根本没有被调用,或者如果 SendKeys 没有效果,你需要显示一个简化但可执行的 .hta 的代码。
如果所有其他 'works',但从 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>
再想想:
根据 here or here 的信息,我一直认为您不能在 VBScript 中使用 JScript 数组:
There is currently no way to convert a JavaScript array into a VBArray.
但是写完我的 test/demo 代码后,我忍不住再试一次:
<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 对象获取 JScript(文字)数组使得集合可用于 For Each。因为这意味着您的
代码:
dataArray = find_all_selected()
=>
Set dataArray = find_all_selected()
你可以试一试,尽管我承认我不知道为什么会这样 'works'。
在 HTA 申请中:
要从 VBScript 调用 Javascript 函数,请使用 "call":
样本:
<script language="VBScript">
call find_all_selected()
</script>
从 Javascript 调用 VBScript Sub:
样本:
<script language="javascript">
DataLoad();
</script>
编写 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>
感谢任何帮助
"Not working" 不能用作问题描述 - 您需要描述实际行为与预期行为并详细发布错误消息。
如果你的 JScript 函数根本没有被调用,或者如果 SendKeys 没有效果,你需要显示一个简化但可执行的 .hta 的代码。
如果所有其他 'works',但从 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>
再想想:
根据 here or here 的信息,我一直认为您不能在 VBScript 中使用 JScript 数组:
There is currently no way to convert a JavaScript array into a VBArray.
但是写完我的 test/demo 代码后,我忍不住再试一次:
<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 对象获取 JScript(文字)数组使得集合可用于 For Each。因为这意味着您的 代码:
dataArray = find_all_selected()
=>
Set dataArray = find_all_selected()
你可以试一试,尽管我承认我不知道为什么会这样 'works'。
在 HTA 申请中:
要从 VBScript 调用 Javascript 函数,请使用 "call":
样本:
<script language="VBScript">
call find_all_selected()
</script>
从 Javascript 调用 VBScript Sub:
样本:
<script language="javascript">
DataLoad();
</script>