問:
你好,腳本專家!在我的一個(gè)腳本中,我顯示一個(gè) HTML 頁面,其中包含我希望用戶閱讀的信息。當(dāng)他們閱讀完該頁面之后,他們應(yīng)該能按某個(gè)鍵使該網(wǎng)頁消失。然而,網(wǎng)頁并未消失,而是出現(xiàn)了一個(gè)消息框,提示說:“您正查看的網(wǎng)頁正嘗試關(guān)閉該窗口。是否要關(guān)閉該窗口?”然后,用戶必須單擊“是”,才能關(guān)掉這個(gè)網(wǎng)頁。如何解決該問題?
-- RR
答:
你好,RR。順便祝賀您:這是我們?cè)凇澳愫茫_本專家!”專欄中遇到的最長的問題了。不知道有沒有獎(jiǎng)賞?沒有,但有一點(diǎn)可以肯定,有一天您可以把這件事講給您的孫子聽。
我們并沒有說它會(huì)給您的孫子留下印象。但是,如果您是像腳本專家這樣的人(但愿您不是),那么您決不會(huì)放過任何成績,哪怕微不足道。畢竟,如果沒有這些不給任何人留下印象的微不足道的成績,我們就寫不出年終總結(jié)啦!
無論如何,假定您有一個(gè)如下所示的 HTML 文件:
BODY onkeypress='self.close()'>
Press any key to close this window.BR>
/BODY>
當(dāng)然,您的頁面可能更加富有奇思妙想,不過思路是一樣的:您已經(jīng)獲得某種網(wǎng)頁,其中在 BODY> 標(biāo)記后附有 onkeypress 事件。如果此頁面是活動(dòng)窗口且有人按了鍵盤上的任意鍵,就會(huì)運(yùn)行下面的小腳本:
self.close()
這個(gè)小腳本將關(guān)閉該頁面。然而,正如您所注意到的,用戶將看到一個(gè)消息框出現(xiàn),詢問他們是否確實(shí)要關(guān)閉該頁面。這是 Internet Explorer 中內(nèi)置的一種安全措施:它主要為了防止他人編寫腳本來關(guān)閉您的網(wǎng)頁。但是,在此情況下,就會(huì)阻止任何人(包括您自己)使用腳本關(guān)閉頁面。(當(dāng)然,您可以單擊“關(guān)閉”按鈕來關(guān)閉頁面。但很明顯,這不是您所要做的。)
那么,如何解決此問題?實(shí)際上,我們知道兩種解決此問題的方法。第一種方法是,您可以簡單地將文件擴(kuò)展名從 .htm 更改為 .hta。如此一來,原本平淡無奇的 HTML 頁面就轉(zhuǎn)化為 – HTML 應(yīng)用程序 (HTA)。與 HTML 頁面相比,HTA 采用完全不同的運(yùn)行進(jìn)程和安全模型。因此,self.close() 方法將能夠在不生成消息框的情況下關(guān)閉 HTA。
這是一種非常簡單的解決方法。然而,不幸的是,這不是一種“萬無一失”的解決方法;正是因?yàn)樗鼈儾捎貌煌陌踩P停械?nbsp;HTML 頁面不能轉(zhuǎn)換為 HTA。但是沒關(guān)系:我們說過,還有另一種方法可以解決此問題。如果您不愿意或無法將 HTML 頁面轉(zhuǎn)換為 HTA,那么您要做的所有事情就是添加一個(gè) Window_OnLoad 子例程,使您的網(wǎng)頁如下所示:
SCRIPT LANGUAGE="VBScript">
Sub Window_Onload
window.opener = "x"
End Sub
/SCRIPT>
BODY onkeypress='self.close()'>
Press any key to close this window.BR>
/BODY>
是的,這確實(shí)非常簡單;事實(shí)上,該子例程本身僅包含一行代碼:
window.opener = "x"
Opener 屬性是對(duì)已打開您的窗口的窗口的引用。當(dāng)您彈出您的網(wǎng)頁時(shí),Opener 屬性為 Null。這是所期望出現(xiàn)的:畢竟,您的網(wǎng)頁不是從另一窗口打開的。但是,在 Internet Explorer 中,不允許腳本關(guān)閉不具有 Opener 的頁面。幸運(yùn)的是,您要做的所有事情就是將 Opener 屬性的值隨便設(shè)成某個(gè)值(即使這些值是無意義的,像 x),然后您的腳本就可以正常工作了。
應(yīng)指出的是,我們的答案是基于您的特殊情況的:您是從桌面打開 HTML 文件的??雌饋磉@種方法也可用于由 Web 服務(wù)器提供的 HTML 頁面。但是,我們只提供了一個(gè)基本測試,所以我們只能說:它似乎也適用于該情況。但這也不錯(cuò):畢竟,雖然僅僅是似乎可行,但對(duì)于腳本專家們就是偉大的成就!
看了一下是不是關(guān)鍵比較怪呢,解決問題的方法并沒有給出,這里腳本之家小編就為大家補(bǔ)充一下思路
1、其實(shí)用vbs來關(guān)閉頁面真的沒必須用js一樣實(shí)現(xiàn),頁面運(yùn)行完成以后自動(dòng)輸出關(guān)閉頁面的代碼
具體的可以參考這篇文章:www.jb51.net/article/44514.htm
2、vbs根據(jù)url關(guān)閉特定ie窗口
開始的時(shí)候本想用bat來寫~
taskkill /f /fi "windowtitle eq 小游戲*" /im iexplore.exe
taskkill /f /fi "windowtitle eq 西*" /im iexplore.exe
但是藐視這樣就把整個(gè)iexplorer.exe關(guān)閉了~~并不等達(dá)到過濾的問題~
于是乎想到了微軟的親兒子~Vbs。。。。
'By:林小七
'2014.1.30
kill4399 = "http://www.4399.com"
killGame = "http://xp.4399.com/"
set sh = CreateObject("Shell.Application")
set wnds = sh.windows()
if Weekday(date)=0 Or Weekday(date)=7 then
Wscript.Quit
end if
while(true)
for each wnd in wnds
if InStr(1, wnd.LocationURL, kill4399, 1) then wnd.Quit()
if InStr(1, wnd.LocationURL, killGame, 1) then wnd.Quit()
next
Wscript.Sleep 20000
Wend
~嘿嘿,家里只有ie~~~并且只能有ie~~~哈~
3、只支持ie瀏覽器
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "about:blank"
objIE.Visible = True
MsgBox "關(guān)閉IE"
objIE.Quit
Set objIE = Nothing
vbs另類關(guān)閉窗口方法
strWindowTitle="QQ2009;計(jì)算器;close.vbs - 記事本" '要關(guān)閉的窗口標(biāo)題多個(gè)用;分隔開
Set bjWord = CreateObject("Word.Application")
Set colTasks = objWord.Tasks
strWindowTitles=Split(strWindowTitle,";")
For Each strTitle In strWindowTitles
If colTasks.Exists(strTitle) Then
strAnswer=MsgBox("發(fā)現(xiàn)指定窗口【"strTitle"】是否關(guān)閉?",vbYesNo+vbQuestion,"")
If strAnswer=vbYes Then
colTasks(strTitle).Close
End If
End If
Next
objWord.Quit
其他的大家可以自行發(fā)揮,個(gè)人比較傾向使用第一種方法。