给 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
我有一段很长的 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