我在做一个自己的浏览器实现多标签的。当打开的URL的target是_blank时我就新建一个标签。我在WebBrowser的NewWindow2事件里面控制了Cancel := True;这样所有的链接都不在的IE里面打开。但是现在遇到了这样的问题,当点击的是IFRAME框架里面的URL时根本获得不到它的URL。所以就新建不了标签。现在的问题是我当我点击的是IFRAME里的URL时我怎么获得它的URL呢。我试着在BeforeNavigate2事件里获取URL,但是碰到打开IFRAME里的URL时它根本不进这个事件,所以失败了。在NewWindow2里可以得到要打开网页的URL吗?
  得到网页里面的内容方法:
procedure TForm1.aplctnvnts1Message(var Msg: tagMSG; var Handled: Boolean); 
var  
    elem: IHTMLElement; 
    point: TPoint; 
    url: string; 
begin 
    case  Msg.message  of 
      WM_LBUTTONDOWN: 
      with wb1 do 
      begin 
        point := ScreenToClient(Msg.pt); 
        if PtInRect(Rect(Left,Top,Left+Width,Top+Height),point) then    //  鼠标在WebBrowser里 
        try 
          elem := nil; 
          elem := (Document as IHTMLDocument2).elementFromPoint(point.X,point.Y); 
          if elem <> nil then 
          begin 
            //这里就可以控制了 
            
          end; 
        except 
        end; 
      end; 
    end; 
end;

解决方案 »

  1.   

    IFRAME框架里面是不好控制,还是可以解决的,只是比较麻烦。特别是IFRAME框架里面还有框架就更麻烦。
      

  2.   

    可能你没明白我的意思,如果说只需要单纯得到IFRAME里面的内容的话那我递归获取是可以做到的,我也实现过。但关键是要得到我点击时的URL是哪个还知道吗?
      

  3.   

    将新打开页面设置为你自己的,这样你在你自己的页面的BeginNavigate就可以得到地址了。
      

  4.   

    建议楼主关联到WebBrowser_V1接口,它的相关事件好像有这些URL参数
      

  5.   

    当点击的是IFrame里面的URL时不会触发BeginNavigate这个事件。我现在得到了点击的iframe的IHTMLDocument2,但是再通过elementFromPoint(point.X,point.Y);得到的内容不是我点击的。应当是坐标乱了,真的不知道怎么办了。
      

  6.   


    procedure TRzWebBrowser.NewWindow2(Sender: TObject; var ppDisp: IDispatch;
      var Cancel: WordBool);begin  ppdisp := 这里赋值成你的 .WebBrowser.Application;end;
      

  7.   

    你这个只是让webbrowser来打开新的网页而已。
      

  8.   

    我现在得到了点击的iframe的IHTMLDocument2,但是再通过elementFromPoint(point.X,point.Y);得到的内容不是我点击的。应当是坐标乱了!