2015-05-25 37 views
1

我有一個非常長的VBScript代碼運行在HTA中。該腳本包括DOM操作,DLL調用和其他腳本。現在我遇到了一個問題,因爲在屏幕上顯示文本需要大量時間,因爲有很多腳本會暫停HTML解析。給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

你能發佈你的HTA編碼嗎? – Hackoo

回答

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 
+0

heyy,..非常感謝你,這對我很有用,但是我想知道這行代碼的作用是什麼?它會導致任何安全問題嗎? – Thorax

+0

我很抱歉,我已經標記爲正確,但後來我意識到這段代碼實際上並沒有延遲/暫停代碼執行。 「YES」它提供了html,但是有時候這個錯誤仍然會發生,因爲有時候html比執行comman'%COMSPEC%/ c'需要更多時間來渲染。所以執行這個命令後,html還沒有呈現。是否有任何方法來控制執行命令的時間量,以便HTML有更多時間來呈現其顯示?謝謝 – Thorax

0

在頁面加載時,將其作爲ASP腳本的第一條語句執行此操作

Response.Buffer = false 

這應該呈現HTML,直到有ASP或COM DLL的調用。

但是,由於在ASP中,HTML和邏輯處於同一頁面,所以它更爲順序。

注:Response.Buffer設置爲true默認和服務器不會發送輸出,直到所有的頁面上的腳本已被處理,或者直到Flush或End方法被調用

+0

嗨sory我忘了提及它的HTA。但是這是否也意味着HTA? – Thorax

+0

我還沒有在HTA文件上編碼太多。但我想它也適用於那裏。讓我們知道它是怎麼回事 –

+0

我已經試過了,但它給了我一個錯誤'「變量未定義:響應」'。我想它不會在HTA中工作,但無論如何感謝:) – Thorax

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> 
+0

感謝您的想法,但我認爲這種解決方法不是我正在尋找的。這可以在其他情況下工作,但不適用於我,這是因爲您在'setTimeout()'中調用的函數將在其調用的函數中的所有堆棧被調用後調用,該函數爲空。我想在調用它時調用'PausedSection()'函數,並阻止代碼執行,但不是HTML解析:)這甚至可能嗎?我很抱歉,我是使用vbs的HTA的新手。 – Thorax

+0

@Thorax對不起,我不明白你在這裏告訴我什麼。上面的代碼在超時到期後調用'PausedSection',然後用所有其他代碼調用'ContinueWork'。在超時期間HTML呈現應該繼續。 AFAICS這正是你一直在問的。 –