是否在VBscript中不再使用Sleep操作?

时间:2012-10-27 00:19:40

标签: vbscript

互联网上许多地方所说的“睡眠”命令(包括在这个论坛上)都不起作用。它现在是一个过时的命令吗?

我正在写这样的VBScript代码:

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

它应该等待1秒然后执行那个简单的命令。这是一个完全简单的陈述,但它不起作用。干净利落。每次说出来都会出现错误:

  

对象要求:'Wscript'

3 个答案:

答案 0 :(得分:3)

Daniel's answer绝对正确关于上下文是关键。虽然您没有可用的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

答案 1 :(得分:3)

另一种选择是(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回应请求获得n+1秒延迟。

答案 2 :(得分:1)

从浏览器运行时,VBScript代码没有Wscript对象。这仅适用于独立的VBS。因此,Wscript.Sleep不会过时,它只是在没有解决方法的浏览器中不起作用。

This thread表明了潜在的解决方法。本文的其余部分来自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秒。