SetTimeout() 不会执行该函数

2024-04-21

这是我的代码片段:

'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,但是有时是 and 有时并非如此。

Update-------------------------------------------------- ----------------------------

我读了很多关于setTimeout他们都说(简而言之)如果浏览器正忙于做某事,则无法触发它。

Now:

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

  • 我认为你应该更改你的函数名称alert不与浏览器暴露的元素发生冲突的东西(有一个window.alert()功能)。也许这会按原样工作(未经测试),但最好避免混淆

  • 将事件绑定到处理程序的正确语法是检索对函数的引用(此处重命名)

    window.setTimeout(GetRef("showAlert"), 2000)

  • 可能是因为我没有足够的信息,但我不认为你需要WaitForAnEvent()功能。事件发生。您将函数绑定为在事件上执行,并在需要时将调用事件处理程序的工作留给浏览器

edited仅作为示例(改编自之前的答案)

在此 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SetTimeout() 不会执行该函数 的相关文章

随机推荐

  • 使用单个字符串查找多个文件路径

    我尝试编写一个批处理脚本来查找与输入字符串同名的文件的所有路径 现在它只能找到找到的第一个文件 我想不出一种方法让它列出多个文件位置 我经验不足 需要一些帮助 这是脚本代码的一部分 start cls echo Enter file nam
  • SQL-在一个字段中选择与另一字段中记录最高的不同记录

    在我有一个像这样的表的情况下 int id PK int staff id int skill id bit mainskill 我想为每位员工 由 Staff id 表示 仅选择一条记录 列出他们的主要技能 由 mainskill 中的
  • Visual Studio Code 中的 PHP 块快捷方式

    如何在 Visual Studio Code 中打开基本 PHP 块 如下所示 In Sublime Text https en wikipedia org wiki Sublime Text I simply type php and p
  • 时间格式说明(Google Directions API)

    我已阅读用于提出方向请求的 Google Directions API 文档 URL 的示例如下 http maps googleapis com maps api directions json origin Brooklyn desti
  • 在 Laravel 中使用 Socialite 登录后重定向到 URL

    我需要使用以下 URL 注册参加锦标赛 http laravel dev tournaments 1 register 该 URL 位于中间件 auth 中 因此如果用户未登录 他将被重定向到登录页面 我需要的是重定向到 http lara
  • 循环遍历多个 JObject 级别并将信息收集为字符串

    我使用以下代码从 URL 收集 Json 数据 var json new WebClient DownloadString http steamcommunity com id tryhardhusky inventory json 753
  • 使用 gdb 调试时彻底退出 valgrind

    我正在使用 valgrind 和 gdb 调试程序 然而 我以一种野蛮的方式终止了这些调试会话 这真的是它应该做的吗 设置调试会话 按照来自的指示valgrind 官方网站 http valgrind org docs manual man
  • 如何显示文件解压进度?

    我正在尝试找出一种方法来显示当前进度以及解压缩并将 zip 文件的内容写入磁盘的剩余时间 我目前正在使用此处找到的 ZipArchiver 类http code google com p ziparchive http code googl
  • Python pandas 插入长整型

    我正在尝试在 Pandas Dataframe 中插入长整数 import numpy as np from pandas import DataFrame data scores 6311132704823138710 273 26850
  • NEDB 文件存储在哪里?

    var Datastore require nedb db new Datastore filename testdb db autoload true var doc hello world n 5 today new Date nedb
  • 在 Google 电子表格上,如何称呼 IP 的城市、国家/地区?

    我想知道是否有一个公式 脚本可以在 Google 电子表格上使用来获取 IP 地址数组的城市 位置 也就是说 假设 A 列上的每个单元格都有 100 个 IP 地址 我应该在 B 列上使用什么公式 脚本来获取各自的城市和位置 最简单的方法是
  • Qt 调试器在 mac 上使用错误的 python 版本

    我使用的是 macOS Mojave 10 14 6 我的Qt版本是5 13 1 我的 Qt Creator 版本是 4 10 0 当我设置断点并运行应用程序时 调试器永远不会完成并打印到调试器日志并显示以下错误 因此 据我所知 lldb
  • iOS 复制和粘贴

    我正在创建一个应用程序 以便在我在 iOS 设备上复制某些内容时保存我复制的项目 无论如何 我是否可以创建一个事件 以便每当我从 iOS 设备上的任何应用程序复制某些内容时 它都会将其保存到我的应用程序中 我希望它在我复制文本时触发 以便将
  • 是否可以使用前导和跟踪来设置 Android 字体样式?

    android 字体样式中是否可以有以下内容 Leading http en wikipedia org wiki Leading 文本行之间的垂直空间 名称来自于机械印刷过程中用于分隔文本行的物理铅片 Tracking http en w
  • 什么是 Unicode、UTF-8 和 UTF-16?

    Unicode 的基础是什么 为什么需要 UTF 8 或 UTF 16 我在谷歌上研究过这个问题 也在这里搜索过 但我不清楚 In VSS https en wikipedia org wiki Microsoft Visual Sourc
  • cuda 共享内存 - 结果不一致

    我正在尝试并行缩减以对 CUDA 中的数组求和 目前我传递一个数组来存储每个块中元素的总和 这是我的代码 include
  • Log4J 仅将一个类附加到附加程序

    我需要定期轮询正在运行的应用程序的 JVM 内存统计信息 我正在运行一个服务来执行此操作并将统计信息写入根记录器 我对根记录器的使用与否没有太多控制权 我想要做的是将这些日志消息路由到单个附加程序 该附加程序应该只处理来自该类的日志消息 而
  • 如何在 python apache beam 中展平多个 Pcollection

    应该如何实现位于以下位置的以下逻辑 https beam apache org documentation pipelines design your pipeline https beam apache org documentation
  • 如何快速将 pandas 数据框行转换为ordereddict

    寻找一种快速方法将 pandas 数据框中的行放入有序字典中 而不使用列表 列表很好 但对于大数据集将花费很长时间 我正在使用 fiona GIS 阅读器 行是有序字典 其模式给出数据类型 我使用 pandas 来连接数据 在很多情况下 行
  • SetTimeout() 不会执行该函数

    这是我的代码片段 in VBScript Sub Main Dim timeoutTimer more scripts here more scripts here more scripts here timeoutTimer window