TWebBrowser
我的应用程序在控件中显示一个从 Web 加载的小横幅。这个横幅实际上是一个包含图像的 HTML 页面;当用户点击图片时,它会将他们带到我们当前正在运行的促销活动中。
这里的坏事是当点击 TWebBrowser 中的链接时,活动页面是在 Internet Explorer 中打开的,而不是在他们的默认浏览器中。我知道发生这种情况是因为TWebBrowser
它是基于 IE 的控件,但是有没有办法在用户选择的浏览器中打开链接?
谢谢你。
TWebBrowser
我的应用程序在控件中显示一个从 Web 加载的小横幅。这个横幅实际上是一个包含图像的 HTML 页面;当用户点击图片时,它会将他们带到我们当前正在运行的促销活动中。
这里的坏事是当点击 TWebBrowser 中的链接时,活动页面是在 Internet Explorer 中打开的,而不是在他们的默认浏览器中。我知道发生这种情况是因为TWebBrowser
它是基于 IE 的控件,但是有没有办法在用户选择的浏览器中打开链接?
谢谢你。
在这种情况OnBeforeNavigate2
下,请检查请求的 URL,如果它是您想要启动的 URL,那么Stop()
当前导航和调用ShellExecute()
以在用户的默认外部浏览器中启动 URL。
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;
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。