假设 TCppWebBrowser 就像 Delphi 中的 TWebBrowser,下面的代码应该可以帮助您。
OnBeforeNavigate2 event 在 TWebBrowser 导航到新 URL 之前被触发。
您所做的是取消该导航,并取消redirect the URL with ShellExecute to an external application(这是 Windows 中配置的默认 Web 浏览器)。
为了使下面的代码正常工作,请双击您的表单,然后输入 FormCreate 事件方法内容。
然后放下一个 TWebBrowser,进入对象检查器的事件页面并双击 OnBeforeNavigate2 事件并输入该代码。
玩得开心!
--杰罗恩
unit MainFormUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
var URL, Flags, TargetFrameName, PostData, Headers: OLEVariant; var Cancel:
WordBool);
private
RedirectUrls: Boolean;
end;
var
Form1: TForm1;
implementation
uses
ShellAPI;
{$R *.dfm}
procedure TForm1.Create(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.stackoverflow.com');
RedirectUrls := True;
end;
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp:
IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OLEVariant;
var Cancel: WordBool);
var
UrlString: string;
begin
if not RedirectUrls then
Exit;
UrlString := URL;
ShellExecute(Self.WindowHandle, 'open', PChar(UrlString), nil, nil, SW_SHOWNORMAL);
Cancel := True;
end;
end.