禁止IE的彈出網(wǎng)頁
實現(xiàn)原理
為了把事情的來龍去脈弄清楚,先從Internet Explorer的體系結(jié)構(gòu)講起。Internet Explorer包含一個名為WebBrowser控件的組件,使用它可以輕易的將Web瀏覽器集成到新的或者已經(jīng)存在的應(yīng)用程序中。通過這個控件,程序可以控制整個瀏覽器的的工作。
WebBrowser包含許多組件,其中很多是COM對象,也就是說可以在應(yīng)用程序中重復(fù)的使用它們。如果想要掌握WebBrowser控件或自動化Internet Explorer,只要了解幾個組件就夠了。如圖所示說明了Internet Explorer4.0的體系結(jié)構(gòu)。
第一個組件是WebBrowser宿主,或稱為容器,它是指任何一個可以重復(fù)使用的WebBrowser控件的應(yīng)用程序。WebBrowser控件既是ActiveX控件也是ActiveDocument宿主。由于它是Active控件,所以WebBrowser可以被任何一個ActiveX控件容器所掌握。作為ActiveDocument服務(wù)器。如果想加載.xls文件,WebBrowser控件將自動的加載Excel。由Internet Explorer安裝,用于讀取和顯示Web網(wǎng)頁,用戶再也不必親手創(chuàng)建便可以加載多個不同文件類型的應(yīng)用程序了,只要在程序中掌握WebBrowser控件就可以。
第二個組件為SHDOCVW(讀作sh-doc-view),是用shdocvw.dll實現(xiàn)的。它掌握WebBrowser控件,并為宿主程序提供瀏覽功能。不過雖然SHDOCVW提供了Internet瀏覽功能,但是它沒有Internet Explorer窗口提供的所有功能。即使這樣,SHDOCVW還是簡化了創(chuàng)建基于Web的應(yīng)用程序的過程。
第三個組件是MSHTML.如前所述,MSHTML組件可以讀取和顯示HTML網(wǎng)頁。MSHTML是一個ActiveX服務(wù)器,因此可以加載其作為ActiveDocument宿主的應(yīng)用程序。MSHTML也是一個ActiveX宿主控件。要記住可以將ActiveX控件放在網(wǎng)頁上,MSHTML是掌管ActiveX控件的的控件,而且MSHTML還可以掌管其他組件,如Active腳本編程引擎,java應(yīng)用程序以及插件等。
WebBrowser由4個接口組成,其中3個提供了其所有的功能(第4個接口DwebBrowserEvents2是為事件準備的)。在IE4.0之前,只有兩個接口,一個用于WebBrowser控件(IWebBrowser),另一個用于Internet Explorer對象(IWebBrowserApp)。IWebBrowser和IwebBrowserApp具有許多相同的功能。因此在為IE4.0擴展WebBrowser功能時,開發(fā)者決定創(chuàng)建第3個接口IWebBrowser2,它是從兩個接口中派生出來的。
每次啟動IE的時候,操作系統(tǒng)都會調(diào)用WebBrowser.dll。只要通過重新定義這個WebBrowser的操作屬性和控制屬性,就可以實現(xiàn)對IE的完全控制。禁止IE的彈出窗口就是這樣實現(xiàn)的。
當用戶在下載一個網(wǎng)頁的時候,IE瀏覽器的WebBrowser會獲得一些注冊事件,這些事件被定義成DISPID常量,常用的幾個事件的標號如下所示:
DISPID_BEFORENAVIGATE2
DISPID_NAVIGATECOMPLETE2
DISPID_DOCUMENTCOMPLETE
DISPID_DOWNLOADBEGIN
DISPID_DOWNLOADCOMPLETE
DISPID_NEWWINDOW2
DISPID_QUIT
DISPID_BEFORENAVIGATE2
從字面上不難理解,DISPID_NEWWINDOW2事件就是需要處理的事件,在這個事件里應(yīng)該阻止彈出窗口出現(xiàn)。
生成新的dll之后,需要將它注冊。下面來看看具體實現(xiàn)。
禁止瀏覽瀏覽某些網(wǎng)頁
網(wǎng)絡(luò)上的資訊有好有壞,應(yīng)該采取措施,限制對某些網(wǎng)頁的瀏覽。
實現(xiàn)原理
和禁止彈出窗口原理一樣,禁止瀏覽某些網(wǎng)頁的做法依舊是修改Internet Explore的WebBrowser的COM DLL庫。通過重定義該DLL,就可以實現(xiàn)對IE的瀏覽設(shè)限功能。
和禁止彈出窗口有所區(qū)別的是,這次處理的事件是DISPID_BEFORENAVIGATE2事件就是在瀏覽器瀏覽網(wǎng)頁之前作預(yù)處理,從而實現(xiàn)對瀏覽站點的限制。
聯(lián)系客服