簡體   English   中英

HTA中的外部VBScript

[英]external VBScript in a HTA

我試圖讓我的HTA從外部位置加載腳本,以免我發布新的HTA文件,隨着我繼續向其中添加新功能,可以動態加載其中的一些腳本。 當我使用IIS在PC上本地托管腳本文件時,可以使它工作。 但是,當我嘗試在外部托管它時(到目前為止,我僅嘗試過GitHub),出現以下錯誤:

  • 行數:1
  • 字符:1
  • 錯誤:“類型不匹配:'Hello'”
  • 代碼:0
  • 網址:

我有類似的東西:

<html>

<HEAD>

<title>HTA Test</title>

<HTA:APPLICATION
     SCROLL="yes"
     SINGLEINSTANCE="yes"
     WINDOWSTATE="maximize"
>

<script language="VBScript" src="http://localhost/HtaUpdates/script.txt"></script>


<SCRIPT Language=vbscript>
Sub Window_OnLoad
    setTimeout "Hello", 100, "VBScript"
 End Sub

</SCRIPT>

</HEAD>
<BODY>

</BODY>

</html>

並在服務器上的script.txt中:

Sub Hello
    MsgBox("Hello.")
End Sub

我有兩個建議給你。

首先,無法加載腳本的原因是因為您將腳本指定為“ txt”類型。 這意味着當您在本地/遠程Web服務器上提供腳本時,腳本的MIME類型將為“文本/純文本”,將不被接受。 如果您將其重命名為適當的“ vbs”擴展名,則IIS將使用MIME類型為“ text / vbscript”的文件來提供文件,這正是HTA期望的。

此外,以這種方式使用setTimeout很脆弱,因為它需要在100ms內成功加載腳本內容。 如果網絡速度慢,通話將失敗。 最好在您通過網絡請求的腳本末尾簡單地調用Hello 您可以重新設置setTimeout調用的用途,以檢查腳本是否在例如10秒鍾內成功加載(通過查找變量,也許是?),並顯示錯誤消息(如果未加載)。 請注意,在下面的解決方案中,我將主代碼放在了script標記之前 ,以便所loaded的全局變量對遠程腳本可見。

最后一條警告:在測試時,我發現HTA正在緩存VBS文件,因此當我對script.vbs進行更改時,它們在我重新加載應用程序時沒有生效。 您需要...

  • 配置Web服務器以設置Expires標頭,以便不緩存這些文件
  • 在HTA文件中編寫一些代碼,以請求腳本后面帶有“ nonce”值,以覆蓋緩存。 例如,使用VBScript的RandomizeRnd函數請求http://localhost/script.vbs?nonce=[RANDOM NUMBER] 以這樣的隨機數請求靜態文件仍然可以在IIS上使用,因為會忽略參數-它只關心文件是否存在。

test.hta:

<html>
<HEAD>
<title>HTA Test</title>
<HTA:APPLICATION SCROLL="yes" SINGLEINSTANCE="yes" WINDOWSTATE="maximize">
<SCRIPT Language=vbscript>
    Dim loaded : loaded = False

    Sub CheckLoaded()
        If loaded Then
            MsgBox("Yes, the script loaded.")
        Else
            MsgBox("Oh dear! The script hasn't loaded.")
        End If
    End Sub

    Sub Window_OnLoad
        setTimeout "CheckLoaded", 1000, "VBScript"
    End Sub
</SCRIPT>
<script language="VBScript" src="http://localhost/script.vbs"></script>
</HEAD>
<BODY>
</BODY>
</html>

script.vbs:

loaded = True
MsgBox("Hello.")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM