互联网上许多地方(包括本论坛的此处)所述的“睡眠”命令不起作用。它现在是一个过时的命令吗?
我正在编写这样的 VBScript 代码:
sub button1_onclick()
Wscript.Sleep 1000
div1.innerHTML = textbox1.value
end sub
它应该等待 1 秒,然后执行那个简单的命令。这是一个非常简单的声明,但它不起作用。干净利落。每次说的时候都会报错:
所需对象:'Wscript'
互联网上许多地方(包括本论坛的此处)所述的“睡眠”命令不起作用。它现在是一个过时的命令吗?
我正在编写这样的 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
- 秒的延迟。n+1
从浏览器运行时,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 秒。