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

在 HTA 中暫停腳本的方法

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

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

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

標(biāo)簽:周口 廣安 延安 漳州 臺(tái)灣 嘉興 玉林 六安

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