gpt4 book ai didi

javascript - 将 VBScript 变量传递给 HTA 中的 Javascript

转载 作者:行者123 更新时间:2023-11-27 23:27:16 25 4
gpt4 key购买 nike

类似于Access VBScript variable within Javascript inside of an HTA我正在尝试在两个脚本之间传递变量。

当我在该问题的答案中使用简化示例时,它的行为如所描述的那样,并且该变量可用于 Javascript。但是当我尝试在我的代码中做同样的事情时,它不起作用。

我认为问题在于我想要赋予代码的 Javascript 部分的变量是在 VBScript 的 sub 内定义的,因此它们在全局范围内不可用。我尝试了两件事 - 首先我在 sub 之外尝试了 Dim,这似乎使变量可用于两个脚本,但我在 VBScript sub 内设置的值没有持久化(JavaScript 识别出该变量存在,但表示它是“未定义”)。其次,我尝试在 VBScript 中创建一个函数来显式地将值设置为全局变量,但遇到了一堆错误,不确定我是否做错了什么,或者这是否不是一个可行的方法。

下面是我的代码的精简版本:

<html>
<head>
<hta:application
APPLICATIONNAME = "Program ALERT"/>

<script type='text/vbscript'>
Sub Window_onload()

Dim cmd, srFSO, srFile, srCount, srMsg

cmd="bcp ""select cast(count(*) as varchar(2)) from database..table where foo = 'bar'"" queryout \\path\file.txt -c -T -S serveraddress"

Set srFSO = CreateObject("Scripting.Filesystemobject")
Set srFile = srFSO.OpenTextFile("\\path\file.txt")
srCount = srFile.Readall
srFile.Close

If srCount = 0 then
Me.SetTimeout "Me.Close()",8000
else
Me.SetTimeout "Me.Close()",0
End If

If srCount = 1 then
srMsg = "There is " + srCount + " open SR."
else
srMsg = "There are " + srCount + " open SRs."
End If

document.getelementbyid("SRs").innerHTML = srMsg

End Sub

Sub ExitProgram
window.close()
End Sub
</script>

<script type="text/javascript">
if (srCount != 0) {
seconds = 8;
}
else {
seconds = 0;
}
function decreaseTime(){
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
seconds--;
if(seconds<0){
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
return true;
}
setTimeout('decreaseTime()',1000);
}

window.onload = function() {
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
setTimeout('decreaseTime()',1000);
}
</script>
</head>

<body scroll="no">
<h1>Title</h1>
<h2><div id="SRs"></div></h2>
<p align="right"><input id=exitbutton type="button" value="Exit" onClick="ExitProgram" class="myButton"></p>
</body>

</html>

本质上,应该发生的是一条消息显示 SQL 查询返回了多少条记录,然后在 8 秒后自动关闭。但是,如果查询没有返回任何记录,那么我希望它立即关闭。

在我添加 JavaScript 部分以在退出按钮上绘制倒计时之前,它表现得很好。但添加倒计时似乎迫使应用程序保持打开状态,直到 JavaScript 倒计时结束,即使 SQL 查询没有返回任何记录。因此,我尝试将查询结果传递给 JavaScript,以便它也可以在需要时将其倒计时起点修改为零。

最佳答案

使用 Teemu 的建议修改了代码:

<html>
<head>
<hta:application
APPLICATIONNAME = "Program ALERT"/>

<script type='text/vbscript'>
Dim seconds

Sub Window_onload()

Dim cmd, srFSO, srFile, srCount, srMsg, strUser

strUser = CreateObject("WScript.Network").UserName
cmd="bcp ""select cast(count(*) as varchar(2)) from database..table where foo = 'bar'"" queryout \\path\file.txt -c -T -S serveraddress"

Set srFSO = CreateObject("Scripting.Filesystemobject")
Set srFile = srFSO.OpenTextFile("\\path\file.txt")
srCount = srFile.Readall
srFile.Close

If srCount = 1 then
srMsg = "There is " + srCount + " open SR."
else
srMsg = "There are " + srCount + " open SRs."
End If

document.getelementbyid("SRs").innerHTML = srMsg

If srCount = 0 then
Me.SetTimeout "Me.Close()",0
else
seconds = 8
Me.SetTimeout "Me.Close()",8000
Me.setButtonCountdown seconds
End If

End Sub

Sub ExitProgram
window.close()
End Sub
</script>

<script type="text/javascript">
function setButtonCountdown(seconds) {
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
setTimeout('decreaseTime()',1);
}

function decreaseTime(){
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
seconds--;
if(seconds<0){
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
return true;
}
setTimeout('decreaseTime()',1000);
}
</script>
</head>

<body scroll="no">
<h1>Title</h1>
<h2><div id="SRs"></div></h2>
<p align="right"><input id=exitbutton type="button" value="Exit" onClick="ExitProgram" class="myButton"></p>
</body>

</html>

关于javascript - 将 VBScript 变量传递给 HTA 中的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com