主頁 > 知識庫 > 在 HTA 中暫停腳本的方法

在 HTA 中暫停腳本的方法

熱門標簽:廣州ai電銷機器人一般多少錢 深圳外呼系統(tǒng)收費 外呼系統(tǒng)免費招代理 外呼系統(tǒng)telrobot 合肥高德地圖標注 拉薩外呼系統(tǒng)業(yè)務(wù) 百度地圖標注是什么意思 怎么看地圖標注 外呼線路中繼線是什么
問:
您好,腳本專家!如何在 HTA 中暫停腳本?
-- TJ
答:
您好,TJ。您知道,從古至今,人們已經(jīng)花費了巨大的時間和精力來探索生命的意義。腳本專家卻從未參與其中。為什么?好吧,先不說懶,我們知道那無關(guān)緊要:就算您的確找到了生命的意義,也沒人在乎它。沒人想知道我們存在的理由;相反,他們 - 同您一樣 - 只想知道到底如何才能暫停一個嵌入在 HTML 應(yīng)用程序 (HTA) 中的腳本。那才是腳本專家為之獻身的事業(yè)。 
現(xiàn)在,如果您不熟悉 HTA,您首先想到的可能是“使用 Wscript.Sleep 即可”。(順便說一句,如果您不熟悉 HTA,可以瀏覽 HTA Developers Center(英文)。)這是個好主意,但卻無法實現(xiàn)。為什么?因為 Wscript 對象是個稍微有些獨特的對象;原因之一是您實際上并不能創(chuàng)建此對象的實例。而只要您運行在 Windows Script Host 之下,Wscript 即會自動為您提供。問題就在這里:當您在 HTA 內(nèi)部運行代碼時,您并沒有運行在 Windows Script Host 之下。您其實是運行在 Internet Explorer 所提供的腳本宿主之下。因為您沒有運行在 Windows Script Host 之下,因此您無法自動訪問 Wscript 對象,而且因為您無法創(chuàng)建自己的 Wscript 對象,也就無法訪問 Wscript.Sleep。用高科技術(shù)語來講,就是“癱瘓”了。
如果 Internet Explorer 提供類似于 Wscript.Sleep 的方法,則這也不是什么大不了的問題;很不幸,它沒有提供。那么是否有某種神奇的解決方法,我們可以使用它來代替 Sleep 方法呢?這有必要問嗎?

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

我們的 HTA 非常簡單:它只由一個按鈕組成,單擊時會運行名為 Test 的子例程。很了不起,對不對?好吧,我們先看看 HTA 的 SCRIPT> 部分,然后再確定它是不是真的很了不起。
我們在 SCRIPT> 部分所做的第一件事就是聲明一個名為 dtmStartTime 的全局變量:
Dim dtmStartTime
這其實對于暫停腳本沒有任何作用;我們只是利用此變量幫助我們查看腳本是否的確象所期待的那樣暫停。如果您現(xiàn)在還沒有明白其含義,別急:很快就會清楚。
接下來是 Test 子例程,在我們單擊按鈕時調(diào)用它:
Sub Test
    dtmStartTime = Now 
    idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
End Sub
請注意,此子例程中僅有兩行代碼。在第一行中,我們只是將當前的時間和日期(使用 Now 函數(shù))賦予變量 dtmStartTime。接下來是下面這行代碼:
idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
無論您相信與否,這就是我們實現(xiàn) Sleep 方法函數(shù)的方式。我們使用 setTimeout 方法創(chuàng)建了一個定時器,其 ID 為 idTimer。正如您所看到的,我們將三個參數(shù)傳遞給 setTimeout:
? PausedSection。此參數(shù)為定時器到時后我們要運行的子例程的名稱。
? 5000。此參數(shù)為在調(diào)用 PausedSection 之前我們希望定時器等待的時間(以毫秒計;5000 毫秒等于5 秒)。換句話說,這就是我們需要的暫停。如果需要將腳本暫停 30 秒,則可將此參數(shù)設(shè)置為 30000。
? VBScript。此參數(shù)是必需的,它只是告訴腳本 PausedSection 是用 VBScript 編寫的。
即,我們單擊按鈕時,Test 子例程將運行。Test 子例程運行時,它將創(chuàng)建名為 idTimer 的定時器。idTimer 的唯一功能就是等待 5 秒然后調(diào)用子例程 PausedSection。明白了嗎?好的。
那么子例程 PausedSection 執(zhí)行什么操作?顯然,我們可以運行任何希望的代碼;簡單起見,在此我們僅做兩件事情。首先,顯示一個消息框,它顯示我們單擊此按鈕的時間及消息框自身實際顯示在屏幕上的時間:
Msgbox dtmStartTime  vbCrLf  Now
若允許舍入誤差,這兩個時間的間隔應(yīng)為 5 秒。這重要嗎?當然重要。請記住,在 PausedSection 子例程內(nèi)部首先發(fā)生的就是顯示此消息框。如果此消息框在我們單擊按鈕 5 秒之后顯示,則表明我們的腳本暫停了 5 秒。您可能會記起,這就是我們的最終目的。
我們在 PausedSection 子例程中要做的另外一件事情就是調(diào)用 clearTimeout 方法來有效地清除定時器:
window.clearTimeout(idTimer)
為什么這樣做?原因很簡單:定時器是設(shè)計為永遠運行的。如果不清除定時器,每 5 秒鐘 idTimer 就將調(diào)用 PausedSection 子例程一次,因此每 5 秒鐘我們的這個小消息框就會在屏幕上彈出一次。我們真的不希望每 5 秒鐘就看到這樣的消息框,因此使用 clearTimeout 刪除定時器。
我們承認,這確實不如使用 Wscript.Sleep 5000 那么簡單;這表明在您啟用和禁用定時器之前可能不得不稍稍掂量一番。因此,這或許帶點挑戰(zhàn),但是,別忘了,這不也是生命的全部意義所在嗎?
不,這不是一個反問句。正如我們所說,我們一直致力于暫停 HTA;除此之外,我們就不知道生命到底是什么了。

標簽:周口 廣安 延安 漳州 臺灣 嘉興 玉林 六安

巨人網(wǎng)絡(luò)通訊聲明:本文標題《在 HTA 中暫停腳本的方法》,本文關(guān)鍵詞  在,HTA,中,暫停,腳本,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在 HTA 中暫停腳本的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于在 HTA 中暫停腳本的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章