在默认浏览器中打开TWebBrowser链接

时间:2012-07-19 08:36:26

标签: delphi browser webbrowser-control delphi-xe2 banner

我的应用程序在TWebBrowser控件中显示从网络加载的小横幅。这个横幅实际上是一个包含图像的HTML页面;当用户点击图片时,它会将他们带到我们当前正在运行的促销活动中。

这里的坏处是,当点击TWebBrowser中的链接时,活动页面将在Internet Explorer中打开,而不是在默认浏览器中打开。我知道这是因为TWebBrowser是一个基于IE的控件,但是有一种方法可以在用户中打开链接'浏览器的选择?

谢谢。

2 个答案:

答案 0 :(得分:8)

OnBeforeNavigate2事件中,检查所请求的网址,如果是您要启动的网址,则Stop()当前导航并调用ShellExecute()以用户默认启动网址外部浏览器。

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; pDisp: IDispatch; var URL: Variant; var Flags: Variant; var TargetFrameName: Variant; var PostData: Variant; var Headers: Variant; var Cancel: WordBool);
begin  
  if (URL should be launched) then
  begin
    Cancel := True;
    WebBrowser1.Stop;
    ShellExecute(0, nil, PChar(String(Url)), nil, nil, SW_SHOWNORMAL);
  end;
end;

答案 1 :(得分:3)

TWebBrowser通过自己的NewWindow2事件公开DWebBrowserExents2 :: NewWindow2

因此处理事件并为事件发送者提供自动化界面

procedure TForm1.WebBrowser1NewWindow2(
    ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);

begin  
// create a new browser (e.g. hosted on a new tab /MDI form/ top level window)
// and expose the browser as a property of the new window. 
// Here a form2 object is created to host the new webbrowser instance
...
form2.InitNavigate=False;//the navigation will be triggered after this event
form2.Visible=False;//new window is only for getting the url
ppDisp := form2.WebBrowser1.Application;  
form2.Show;
end;

现在,您可以在form2上的BeforeNavigate2事件处理程序中获取新窗口的URL。取消该事件,您可以使用ShellExecute启动默认浏览器。

如果您只支持Windows SP SP2或更高版本,则可以在创建新窗口之前挂钩NewWindow3事件,该事件在参数中提供URL。