//我现在采用以下方法来接受新的窗口
procedure TForm1.WebBrowserNewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  ppDisp := NewWebBrowser.window.DefaultDispatch;
end;但是我想实现屏蔽掉弹出窗口和某些指定url地址的窗口,应该怎么做呢?谢谢

解决方案 »

  1.   

    在 BeforeNavigate2 事件里判断 URL 和 TargetFrameName 就可以了。procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    beginend;
      

  2.   

    设置 Cancel := True 就可以进行屏蔽
      

  3.   

    先感谢楼上的回答.如果是过滤url这样应该是可以了,
    但是如果要屏蔽弹出窗口呢?应该没有办法只是窗口是以什么方法打开的,
    如果是window.open(url)方式打开的窗口,有没有办法判断呢?
      

  4.   

    uses ShellAPI;var
      vStatusText: WideString;
      vUpdating: Boolean;procedure TForm1.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://www.sina.com.cn');
    end;procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
      const Text: WideString);
    begin
      vStatusText := Text;
    end;procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
    begin
      vUpdating := True;
      WebBrowser2.RegisterAsBrowser := True;
      ppDisp := WebBrowser2.Application;
    end;procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    begin
      Cancel := vUpdating;
      if URL = vStatusText then //用户点击
        ShellExecute(Handle, nil, 'IEXPLORE.EXE',
          PChar(string(URL)), nil, SW_SHOW);
      vUpdating := False;
    end;
      

  5.   

    谢谢zswang(伴水清清)
    有一些思路了。不过我觉得基于窗口打开方式的过滤好像没有特别好的方法。
    比如对于Window.open(url),这种打开方式,
    有没有办法判断是页面中自动打开的还是用户操作(比如点击一个按钮)打开的呢。
    一般情况广告窗口都是在主页面载入候自动弹出来的,这种应该过滤。
    如果用户是主动行为的,虽然也可能是window.open(url)打开的,这种确不应该过滤。有什么好的的思路吗?
    谢谢!
      

  6.   

    procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
      const Text: WideString);
    begin
      vStatusText := Text;
      //如果是用户主动行为,那最后一个状态字符就是用户点击的连接
    end;
      

  7.   

    采用状态的判断对于按钮好像是无效的吧。
    procedure TForm1.WebBrowserBeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    begin
      if(statBottom.SimpleText = URL) then
        ShowMessage(URL);  
    end;如果我是点击连接,上面判断成立,
    如果我是点击按钮导致页面跳转或者弹出,这个判断是不成立的