我在做一个自己的浏览器实现多标签的。当打开的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;
得到网页里面的内容方法:
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;
procedure TRzWebBrowser.NewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);begin ppdisp := 这里赋值成你的 .WebBrowser.Application;end;