簡體   English   中英

VBscript 中不再使用睡眠操作嗎?

[英]Is the Sleep operation no longer used in VBscript?

互聯網上許多地方(包括本論壇上的此處)所述的“睡眠”命令不起作用。 它現在是一個過時的命令嗎?

我正在編寫這樣的 VBScript 代碼:

sub button1_onclick()
Wscript.Sleep 1000
div1.innerHTML = textbox1.value
end sub

它應該等待 1 秒鍾,然后執行那個簡單的命令。 這是一個非常簡單的聲明,但它不起作用。 干凈利落。 每次說的時候都會報錯:

所需對象:'Wscript'

丹尼爾的回答是絕對正確的,上下文是這里的關鍵。 盡管您沒有可用的WScript方法,但您確實擁有完整的瀏覽器 DOM,包括window.setTimeout方法。 使用 VBScript,將代碼傳遞給setTimeout的語義與 JavaScript 有點不同,但它仍然是可能的:

Sub button1_onclick()
    window.setTimeout GetRef("Delayed"), 1000
End Sub

Sub Delayed()
    div1.innerHTML = textbox1.value
End Sub

另一種選擇是(ab)使用ping (如果你想避免額外的腳本):

Sub Sleep(seconds)
  CreateObject("WScript.Shell").Run "%COMSPEC% /c ping 127.0.0.1 -n " _
    & seconds+1, 0, True
End Sub

ping以(大約)1 秒的間隔發送回聲請求,因此您可以通過發送n+1回聲請求來獲得n秒的延遲。

從瀏覽器運行時,VBScript 代碼沒有 Wscript 對象。 這僅適用於獨立的 VBS。 因此, Wscript.Sleep 並沒有過時,它只是在沒有解決方法的情況下無法在瀏覽器中工作。

這個線程提出了一個潛在的解決方法。 這篇文章的其余部分來自 mayayana 在鏈接頁面上的條目:

如果您的安全性可以允許 WScript.Shell 運行,您可以這樣做 -

網頁中的腳本子:

<SCRIPT LANGUAGE="VBScript">
Sub Sleep(NumberSeconds)
Dim SH, Ret
Set SH = CreateObject("WScript.Shell")
Ret = SH.Run("sleeper.vbs " & NumberSeconds, , True)
End Sub
</SCRIPT>

在與網頁相同的文件夾中,放置一個名為 sleeper.vbs 的文件,並將此代碼放入其中:

Dim Arg
on error resume next
Arg = WScript.Arguments(0) * 1000
WScript.sleep Arg

然后你可以調用類似的東西:

Sleep 5 '——暫停 5 秒。

暫無
暫無

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

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