ASP.NET中弹出窗口常见的封杀方式浅谈


  本文标签:ASP.NET中弹出窗口

  ASP.NET中弹出窗口常见的封杀方式有哪些呢?让我们开始介绍  。

  ASP.NET中弹出窗口封杀之1、基于窗口标题的封杀方式

  这种封杀方式的原理是定时检查所有的IE窗口标题,然后于已经有的列表(由程序维护的一个数组列表)来比较,如果有相同的,我们就关闭这个窗口  。显然,这种方式有着诸多缺陷,它封杀了所有的弹出的窗口,管得太死,在程序真正使用的很少  。不过,依据它进行的变形方式倒使用得相当的普遍  。那就是,基于窗口标题名称的智能过滤技术,它根据弹出窗口的标题是否含有关于广告的关键字进行封杀,这为提高过滤效果作出了很好的探索  。

  ASP.NET中弹出窗口封杀之2、基于窗口类和位置的封杀方式

  经过分析发现正常浏览窗口的类名是IEFRAME和CabinetWClass,而广告窗口的类名是CabinetWClass  。进一步分析发现:广告窗口的WorkerA类和Shell DocObject View类的rect.top的值是相同的,正常IE窗口的WorkerA类和Shell DocObject View类的rect.top的值是不相同的  。根据以上两点就可以书写广告杀手程序了  。 事实上,我对此程序的通用性持怀疑态度  。因为笔者用Spy++分析发现,在Windows2000( 笔者使用的操作系统)中,IE窗口的类都为IEFrame  。同时,由于Win2000是一个基于Unicode代码的操作系统,所以没有WorkerA类,而以WorkerW类取而代之  。同时,也不存在rect.top不相同的情况,由于笔者没有WindowsXP操作系统,所以不能针对WindowsXP作进一步的试验  。

  ASP.NET中弹出窗口封杀之3、基于IE COM组件的封杀方式

  以上两种方式都是把IE窗口当作一个普通的Windows窗口对待,进行判断的  。事实上,IE是一个典型的基于COM组件的浏览器,所有的基于IE内核的浏览器都是包装shdocvw.dll文件,然后书写相应的BHO代码  。只有这样才能做到真正的控制IE浏览器,而不是方法一、二这样的隔靴搔痒  。

  还有一种基于IE内核的弹出窗口封杀方法  。它可以在弹出窗口打开之前加以拦截  。其原理是:每当IE打开一个新的窗口时候都会触发NewWindow事件,执行OnNewWindow2([out] IDispatch*, [out] BOOL *bCancel)方法  。重载此方法,判断打开新窗口事件是否发生在浏览页面已经下载完毕之后  。如果是,说明是正常的弹出窗口,反之加以拦截  。

  由于Gosurf这样的浏览器本身就重载了Shocvm.dll组件,所以使用第三种方法就自然成了顺理成章的事  。然而在使用过程中有时也会发现,广告过滤不很完美,但原理基本如此  。

  ASP.NET中弹出窗口常见的封杀方式就向你介绍到这里,希望这样的介绍对你有所帮助  。