互联网上许多地方所说的“睡眠”命令(包括在这个论坛上)都不起作用。它现在是一个过时的命令吗?
我正在写这样的VBScript代码:
sub button1_onclick()
Wscript.Sleep 1000
div1.innerHTML = textbox1.value
end sub
它应该等待1秒然后执行那个简单的命令。这是一个完全简单的陈述,但它不起作用。干净利落。每次说出来都会出现错误:
对象要求:'Wscript'
答案 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秒。