与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,以便在需要时也可以将其倒计时起点修改为零。
答案 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>