SetTimeout()不会执行该函数

时间:2015-05-29 04:19:49

标签: vbscript settimeout internet-explorer-11

所以这是我的代码片段:

'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的文章,他们都说(简而言之)如果浏览器忙于做某事就无法触发。

现在:

  • 假设浏览器正在做某事(无限),这是正确的吗? setTimeout找不到触发函数的可用时刻?
  • VBScript / Javascript中是否有办法检查IE(浏览器)当前是否正在执行渲染文本或执行某些脚本等操作?

2 个答案:

答案 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)