所以这是我的代码片段:
'in VBScript
Sub Main()
Dim timeoutTimer
'more scripts here
'more scripts here
'more scripts here
timeoutTimer = window.setTimeout("alert()", 2000)
Call WaitForAnEvent() 'This function waits for an event to happen
'if there is no event then code execution stop's
'and wait
'more scripts here
'more scripts here
'more scripts here
End Sub
Sub alert()
MsgBox "Help!"
End Sub
会发生什么事情,有时候alert()
没有被触发,我也不知道为什么。我对setTimeout()进行了一些研究,他们说如果计时器到期,只要有可能的机会执行它,就会触发setTimeout。我相信在调用WaitForAnEvent()
之后会有一个可用的机会来执行setTimeout
有时是,有时则不是。
更新 --------------------------------------- ----------------------------------------
我一直在阅读很多关于setTimeout
的文章,他们都说(简而言之)如果浏览器忙于做某事就无法触发。
现在:
答案 0 :(得分:2)
我认为您应该将函数名称从alert
更改为不与浏览器公开的元素发生冲突的函数(有window.alert()
函数)。也许这将按原样运行(未经测试),但最好避免混淆
将事件绑定到处理程序的正确语法是检索对函数的引用(此处已重命名)
window.setTimeout(GetRef("showAlert"), 2000)
可能是因为我没有足够的信息,但我不认为您需要WaitForAnEvent()
功能。事件发生了。绑定函数以在事件上执行,并在需要时向浏览器保留调用事件处理程序的工作
已编辑仅供参考(改编自先前的回答)
在此HTA中,有五个事件正在处理:按下开始按钮,按下停止按钮,按下退出按钮,时钟间隔和文件存在检查
基本思想不是让代码一直运行。浏览器具有控件,当事件发生时(按下按钮或间隔到达),处理事件的代码被调用并结束。
<html>
<head>
<title>ClockwithAlerts</title>
<HTA:APPLICATION
ID="ClockHTA"
APPLICATIONNAME="ClockHTA"
MINIMIZEBUTTON="no"
MAXIMIZEBUTTON="no"
SINGLEINSTANCE="no"
SysMenu="no"
BORDER="thin"
/>
<SCRIPT LANGUAGE="VBScript">
Const TemporaryFolder = 2
Dim timerID, timerFile
Sub Window_onLoad
window.resizeTo 600,280
SetClockTimer True
timerFile = window.setInterval(GetRef("CheckFilePresence"), 1500)
End Sub
Sub CheckFilePresence
Dim myFile
With CreateObject("Scripting.FileSystemObject")
myFile = .BuildPath(.GetSpecialFolder( TemporaryFolder ), "test.txt")
If .FileExists(myFile) Then
fileStatus.innerText = "FILE ["& myFile &"] FOUND"
Else
fileStatus.innerText = "File ["& myFile &"] is not present"
End If
End With
End Sub
Sub SetClockTimer( Enabled )
If Enabled Then
timerID = window.setInterval(GetRef("RefreshTime"), 1000)
RefreshTime
Else
window.clearInterval(timerID)
timerID = Empty
End If
StartButton.disabled = Enabled
StopButton.disabled = Not Enabled
End Sub
Sub RefreshTime
CurrentTime.InnerHTML = FormatDateTime(Now, vbLongTime)
End Sub
Sub ExitProgram
If Not IsEmpty(timerID) Then window.clearInterval(timerID)
If Not IsEmpty(timerFile) Then window.clearInterval(timerFile)
window.close()
End Sub
</SCRIPT>
</head>
<body>
<input id="checkButton" type="button" value="EXIT" name="run_button" onClick="ExitProgram" align="right">
<br><br>
<span id="CurrentTime"></span>
<br><br>
<input id="Stopbutton" type="button" value="Stop" name="StopButton" onclick="SetClockTimer(False)">
<input id="StartButton" type="button" value="Start" name="StartButton" onclick="SetClockTimer(True)">
<hr>
<span id="fileStatus"></span>
</body>
</html>
答案 1 :(得分:0)
尝试删除函数名称旁边的引号:
timeoutTimer = window.setTimeout(alert, 2000)