我的应用程序在TWebBrowser
控件中显示从网络加载的小横幅。这个横幅实际上是一个包含图像的HTML页面;当用户点击图片时,它会将他们带到我们当前正在运行的促销活动中。
这里的坏处是,当点击TWebBrowser中的链接时,活动页面将在Internet Explorer中打开,而不是在默认浏览器中打开。我知道这是因为TWebBrowser
是一个基于IE的控件,但是有一种方法可以在用户中打开链接'浏览器的选择?
谢谢。
答案 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。