上一篇:Delphi捕获TWebBrowser的Close事件
下一篇:TWebBrowser控件彻底防止弹出新窗口

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事件弹出窗口网页