5

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

我正在编写这样的 VBScript 代码:

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

它应该等待 1 秒,然后执行那个简单的命令。这是一个非常简单的声明,但它不起作用。干净利落。每次说的时候都会报错:

所需对象:'Wscript'

4

3 回答 3

5

关于上下文是这里的关键,丹尼尔的回答是绝对正确的。尽管您没有WScript可用的方法,但您确实拥有完整的浏览器 DOM,包括该window.setTimeout方法。使用 VBScript,将代码传递给的语义与setTimeoutJavaScript 略有不同,但仍有可能:

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

Sub Delayed()
    div1.innerHTML = textbox1.value
End Sub
于 2012-10-27T06:14:50.647 回答
4

另一种选择是(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

于 2012-10-27T10:57:27.823 回答
2

从浏览器运行时,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 秒。

于 2012-10-27T00:38:02.120 回答