用vbs指令碼來關閉 HTML 頁面的代碼

來源:互聯網
上載者:User

問:
你好,指令碼專家!在我的一個指令碼中,我顯示一個 HTML 頁面,其中包含我希望使用者閱讀的資訊。當他們閱讀完該頁面之後,他們應該能按某個鍵使該網頁消失。然而,網頁並未消失,而是出現了一個訊息框,提示說:“您正查看的網頁正嘗試關閉該視窗。是否要關閉該視窗?”然後,使用者必須單擊“是”,才能關掉這個網頁。如何解決該問題?

-- RR

答:
你好,RR。順便祝賀您:這是我們在“你好,指令碼專家!”專欄中遇到的最長的問題了。不知道有沒有獎賞?沒有,但有一點可以肯定,有一天您可以把這件事講給您的孫子聽。

我們並沒有說它會給您的孫子留下印象。但是,如果您是像指令碼專家這樣的人(但願您不是),那麼您決不會放過任何成績,哪怕微不足道。畢竟,如果沒有這些不給任何人留下印象的微不足道的成績,我們就寫不出年終總結啦!

無論如何,假定您有一個如下所示的 HTML 檔案:

<BODY onkeypress='self.close()'>
Press any key to close this window.<BR>
</BODY>

當然,您的頁面可能更加富有奇思妙想,不過思路是一樣的:您已經獲得某種網頁,其中在 <BODY> 標記後附有 onkeypress 事件。如果此頁面是使用中視窗且有人按了鍵盤上的任意鍵,就會運行下面的小指令碼:

self.close()

這個小指令碼將關閉該頁面。然而,正如您所注意到的,使用者將看到一個訊息框出現,詢問他們是否確實要關閉該頁面。這是 Internet Explorer 中內建的一種安全措施:它主要為了防止他人編寫指令碼來關閉您的網頁。但是,在此情況下,就會阻止任何人(包括您自己)使用指令碼關閉頁面。(當然,您可以單擊“關閉”按鈕來關閉頁面。但很明顯,這不是您所要做的。)

那麼,如何解決此問題?實際上,我們知道兩種解決此問題的方法。第一種方法是,您可以簡單地將副檔名從 .htm 更改為 .hta。如此一來,原本平淡無奇的 HTML 頁面就轉化為 – HTML 應用程式 (HTA)。與 HTML 頁面相比,HTA 採用完全不同的運行進程和安全模型。因此,self.close() 方法將能夠在不產生訊息框的情況下關閉 HTA。

這是一種非常簡單的解決方案。然而,不幸的是,這不是一種“萬無一失”的解決方案;正是因為它們採用不同的安全模型,有的 HTML 頁面不能轉換為 HTA。但是沒關係:我們說過,還有另一種方法可以解決此問題。如果您不願意或無法將 HTML 頁面轉換為 HTA,那麼您要做的所有事情就是添加一個 Window_OnLoad 子常式,使您的網頁如下所示:

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

是的,這確實非常簡單;事實上,該子常式本身僅包含一行代碼:

window.opener = "x"

Opener 屬性是對已開啟您的視窗的視窗的引用。當您彈出您的網頁時,Opener 屬性為 Null。這是所期望出現的:畢竟,您的網頁不是從另一視窗開啟的。但是,在 Internet Explorer 中,不允許指令碼關閉不具有 Opener 的頁面。幸運的是,您要做的所有事情就是將 Opener 屬性的值隨便設成某個值(即使這些值是無意義的,像 x),然後您的指令碼就可以正常工作了。

應指出的是,我們的答案是基於您的特殊情況的:您是從案頭開啟 HTML 檔案的。看起來這種方法也可用於由 Web 服務器提供的 HTML 頁面。但是,我們只提供了一個基本測試,所以我們只能說:它似乎也適用於該情況。但這也不錯:畢竟,雖然僅僅是似乎可行,但對於指令碼專家們就是偉大的成就!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.