将VBScript变量传递给HTA中的Javascript

时间:2016-01-18 23:08:41

标签: javascript vbscript hta

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

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

我认为问题是我想要给我的代码的Javascript部分提供的变量是在VBScript中的set.seed(1928) mat <- matrix(rnorm(100*110), ncol = 110) mat[sample(1:length(mat), 700, replace = FALSE)] <- NA mat1 <- mat2 <- mat mat1 <- lapply(mat1, function(n) { mat1[is.na(mat1[,n]),n] <- median(mat1[,n], na.rm = TRUE) } ) for (n in 1:ncol(mat2)) { mat2[is.na(mat2[,n]),n] <- median(mat2[,n], na.rm = TRUE) } 内定义的,因此它们在全局范围内不可用。我尝试了两件事 - 首先我在sub之外尝试Dim,这似乎使变量可用于两个脚本,但我在VBScript子集中设置的值不会持续存在( JavaScript识别变量存在,但表示它未定义&#39;)。其次,我尝试在VBScript中创建一个函数,将值显式设置为全局变量,遇到一堆错误,不确定我是否做错了,或者这不是一个可行的方法。

以下是我的代码的精简版:

sub

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

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

1 个答案:

答案 0 :(得分:1)

使用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>