TWebBrowser控件彻底防止弹出新窗口2
发布于: 2012/12/16 18:32:50 | 发布在: Delphi文章 | 点击:
前面介绍的响应OnNavigateComplete2事件一般能防止绝大多数的网页弹窗,但有些网页使用了定时器,过一段时间刷新一下网页,OnNavigateComplete2事件就不会触发,广告窗口照样弹出来了。所以还是要使用TWebBrowser控件的OnNewWindow2事件,弹出任何新窗口都会触发该事件,通过该事件拦截广告弹窗可以做到一劳永逸。下面介绍具体实现:
1. 在程序窗体上放置一个TPanel控件,然后在Panel1上另外放置一个TWebBrowser控件命名为:WbNoAd,将Panel1的Visible属性设置为:False,使Panel1和WbNoAd控件都不可见(设置WbNoAd的Visible属性为False好像不起作用,必须放置到一个TPanel上才能使它看不见)。
2. 响应窗体的OnCreate事件,初始化WbNoAd,这一步不是必须多余的,必须初始化WbNoAd,不然的话你试试,广告窗口照样弹出来。
procedure TForm1.FormCreate(Sender: TObject);
begin
WbNoAd.Navigate('about:blank');
end;
3. 响应主浏览器的OnNewWindow2事件
procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
ppDisp := WbNoAd.Application; //将弹出的网页放到WbNoAd中去加载
Cancel := False; //既然拦不住,就不拦,让你弹
end;
4. 响应WbNoAd的OnBeforeNavigate2事件
procedure TForm1.WbNoAdBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
var Cancel: WordBool);
begin
if URL <> 'about:blank' then
Cancel := True; //窗口弹到我这来了,我取消浏览你总可以了吧!
end;
TWebBrowser, 事件, 弹出, 窗口, 网页