我有一个非常长的VBScript代码,它在HTA中运行。该脚本包括DOM操作,DLL调用和其他scrips。现在我遇到了一个问题,因为在屏幕上渲染文本需要花费大量时间,因为有很多脚本会暂停HTML解析。
现在我打算创建一个简单的延迟来阻止代码执行,但不会阻止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()
答案 0 :(得分:1)
也许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>
答案 1 :(得分:0)
在页面加载时,将其作为ASP脚本的第一个语句执行
Response.Buffer = false
这应该呈现HTML,直到调用ASP或COM DLL。
但是,由于在ASP中,HTML和Logic位于同一页面中,因此它更加顺序。
注意:默认情况下,Response.Buffer设置为true,并且在处理完页面上的所有脚本之前,或者在调用Flush或End方法之前,服务器不会发送输出
答案 2 :(得分:0)
这就是我使用的。例如,在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