禁止IE弹出网页和屏蔽网页原理

禁止IE的弹出网页

实现原理

为了把事情的来龙去脉弄清楚,先从Internet Explorer的体系结构讲起。Internet Explorer包含一个名为WebBrowser控件的组件,使用它可以轻易的将Web浏览器集成到新的或者已经存在的应用程序中。通过这个控件,程序可以控制整个浏览器的的工作。

WebBrowser包含许多组件,其中很多是COM对象,也就是说可以在应用程序中重复的使用它们。如果想要掌握WebBrowser控件或自动化Internet Explorer,只要了解几个组件就够了。如图所示说明了Internet Explorer4.0的体系结构。

 

    第一个组件是WebBrowser宿主,或称为容器,它是指任何一个可以重复使用的WebBrowser控件的应用程序。WebBrowser控件既是ActiveX控件也是ActiveDocument宿主。由于它是Active控件,所以WebBrowser可以被任何一个ActiveX控件容器所掌握。作为ActiveDocument服务器。如果想加载.xls文件,WebBrowser控件将自动的加载Excel。由Internet Explorer安装,用于读取和显示Web网页,用户再也不必亲手创建便可以加载多个不同文件类型的应用程序了,只要在程序中掌握WebBrowser控件就可以。

    第二个组件为SHDOCVW(读作sh-doc-view,是用shdocvw.dll实现的。它掌握WebBrowser控件,并为宿主程序提供浏览功能。不过虽然SHDOCVW提供了Internet浏览功能,但是它没有Internet Explorer窗口提供的所有功能。即使这样,SHDOCVW还是简化了创建基于Web的应用程序的过程。

    第三个组件是MSHTML.如前所述,MSHTML组件可以读取和显示HTML网页。MSHTML是一个ActiveX服务器,因此可以加载其作为ActiveDocument宿主的应用程序。MSHTML也是一个ActiveX宿主控件。要记住可以将ActiveX控件放在网页上,MSHTML是掌管ActiveX控件的的控件,而且MSHTML还可以掌管其他组件,如Active脚本编程引擎,java应用程序以及插件等。

    WebBrowser4个接口组成,其中3个提供了其所有的功能(第4个接口DwebBrowserEvents2是为事件准备的)。在IE4.0之前,只有两个接口,一个用于WebBrowser控件(IWebBrowser),另一个用于Internet Explorer对象(IWebBrowserApp)。IWebBrowserIwebBrowserApp具有许多相同的功能。因此在为IE4.0扩展WebBrowser功能时,开发者决定创建第3个接口IWebBrowser2,它是从两个接口中派生出来的。

    每次启动IE的时候,操作系统都会调用WebBrowser.dll。只要通过重新定义这个WebBrowser的操作属性和控制属性,就可以实现对IE的完全控制。禁止IE的弹出窗口就是这样实现的。

    当用户在下载一个网页的时候,IE浏览器的WebBrowser会获得一些注册事件,这些事件被定义成DISPID常量,常用的几个事件的标号如下所示:

    DISPID_BEFORENAVIGATE2

    DISPID_NAVIGATECOMPLETE2

    DISPID_DOCUMENTCOMPLETE

    DISPID_DOWNLOADBEGIN

    DISPID_DOWNLOADCOMPLETE

    DISPID_NEWWINDOW2

    DISPID_QUIT

    DISPID_BEFORENAVIGATE2

    从字面上不难理解,DISPID_NEWWINDOW2事件就是需要处理的事件,在这个事件里应该阻止弹出窗口出现。

    生成新的dll之后,需要将它注册。下面来看看具体实现。

禁止浏览浏览某些网页

网络上的资讯有好有坏,应该采取措施,限制对某些网页的浏览。

实现原理

和禁止弹出窗口原理一样,禁止浏览某些网页的做法依旧是修改Internet ExploreWebBrowserCOM DLL库。通过重定义该DLL,就可以实现对IE的浏览设限功能。

和禁止弹出窗口有所区别的是,这次处理的事件是DISPID_BEFORENAVIGATE2事件就是在浏览器浏览网页之前作预处理,从而实现对浏览站点的限制。

 

 

摘自VC++网络通信编程实用案例精选    曹衍龙 刘海英 编著

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值