给 HTML 时间来呈现其文本

Give HTML time to render its text

我有一段很长的 VBScript 代码,它在 HTA 中运行。该脚本包括 DOM 操作、DLL 调用和其他脚本。现在我遇到了一个问题,因为在屏幕上呈现文本需要花费大量时间,因为有很多脚本会暂停 HTML 解析。

现在我打算创建一个简单的 delay 来阻止代码执行而不是 HTML 解析。但是我不知道怎么做。

更新

这是我想要的示例代码(抱歉,请不要介意我是 HTA vbs 新手的语法)

Sub Window_Onload()
    Call Main()
End Sub

Sub Main()
    Dim delay
    el.innerHtml = "Please"
    el2.innerHtml = "Help"
    el3.innerHtml = "me"

    'more scripts here
    'more scripts here
    'more scripts here
    'more scripts here

    el4.innerHtml = "this element is dependent to other scripts"
    el5.innerHtml = "this element is dependent to other scripts"
    el6.innerHtml = "this element is dependent to other scripts"

    delay = 2
    Call PauseAndRenderHtml(delay) 'this function will block the code execution
                                   'but not the html parsing

   'more scripts here

    Do While True
       'very long scripts that loops and pause, loops and pause........
    Loop
End Sub

Sub PauseAndRenderHtml(timeToBreath)
   'Take a breath :)
   'breath/pause for timeToBreath seconds
End Sub

我需要函数PauseAndRenderHtml()

在页面加载时,将其作为 ASP 脚本的第一条语句执行

Response.Buffer = false

这应该呈现 HTML,直到调用 ASP 或 COM DLL。

但是,由于在ASP中,HTML和Logic在同一页,所以比较有顺序。

注意:Response.Buffer 默认设置为 true,服务器不会发送输出,直到页面上的所有脚本都已处理,或者直到调用 Flush 或 End 方法

也许描述的计时器 here 可能会有所帮助:

<head>
<title>Sample</title>
<HTA:APPLICATION ID="oHTA"
     APPLICATIONNAME="Sample"
>
</head>

<script language="VBScript">
  idTimer = window.setTimeout(GetRef("PausedSection"), 10000, "VBScript")

  Sub PausedSection
    ContinueWork
    window.clearTimeout(idTimer)
  End Sub

  Sub ContinueWork
    'other code here
  End Sub
</script>

<body>
...
</body>

这是我用的。例如,在 For 循环中,我将在每个循环中调用它,它会更新 HTML.

'This sleep function produces a near-instant delay for inserting a break in script execution
'mainly for updating HTML in the middle of script execution.
Sub Sleepy
    strCmd = "%COMSPEC% /c"
    objShell.Run strCmd,0,1
End Sub