2016-01-18 67 views
1

Access VBScript variable within Javascript inside of an HTA類似我試圖在兩個腳本之間傳遞一個變量。在HTA中將VBScript變量傳遞給Javascript

當我在該問題的答案中使用簡化示例時,其行爲與所述相同,並且該變量可用於Javascript。但是當我試圖在我的代碼中做同樣的事情時,它不起作用。

我認爲問題在於我想給我的代碼的JavaScript部分的變量是在VBScript中的sub內部定義的,因此它們不可用於全局。我嘗試了兩件事 - 首先我嘗試了sub之外的Dim,這似乎使這兩個腳本都可以使用該變量,但是我在VBScript子內部設置的值沒有持續存在(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,以便它也可以在需要時將其倒計數開始點修改爲零。

+0

這聽起來像你在這裏問多個問題。 1)爲什麼變量值不傳播? 2)如果SQL提前結束,爲什麼不關閉頁面? – GreenGiant

+1

你提到你試圖把變量放在Sub的外部,但是在你的代碼中,它仍然在Sub中。你可以在小組之外發布你的代碼嗎? – GreenGiant

+0

我想我的問題是*我怎樣才能讓變量傳播,所以我可以把一個'if'條件放入Javascript * **或** *我怎樣才能將相同的數據放入Javascript(出於同樣的目的) *。第一種方式更可取,因爲第二種方式基本上意味着將客戶端的工作負載/冗餘加倍。 – CactusCake

回答

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>