Delphi 如何在默认浏览器中打开chromium浏览器链接上的单击?
我想实现这一点,当用户单击TChromium浏览器页面内的超链接时,新页面将在其默认浏览器中打开。在事件中,检查Delphi 如何在默认浏览器中打开chromium浏览器链接上的单击?,delphi,chromium-embedded,tchromium,Delphi,Chromium Embedded,Tchromium,我想实现这一点,当用户单击TChromium浏览器页面内的超链接时,新页面将在其默认浏览器中打开。在事件中,检查navType参数是否等于,如果是,则将结果参数返回True(这将取消Chromium请求)并调用,例如,传递值以在用户的默认浏览器中打开链接: uses ShellAPI, ceflib; procedure TForm1.Chromium1BeforeBrowse(Sender: TObject; const browser: ICefBrowser; const fra
navType
参数是否等于,如果是,则将结果
参数返回True(这将取消Chromium请求)并调用,例如,传递值以在用户的默认浏览器中打开链接:
uses
ShellAPI, ceflib;
procedure TForm1.Chromium1BeforeBrowse(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest;
navType: TCefHandlerNavtype; isRedirect: boolean; out Result: Boolean);
begin
if navType = NAVTYPE_LINKCLICKED then
begin
Result := True;
ShellExecuteW(0, nil, PWideChar(request.Url), nil, nil, SW_SHOWNORMAL);
end;
end;
在CEF3中,
navType=navType\u LINKCLICKED
在OnBeforeBrowse
事件中不再可能出现,就像TLama的回答一样。相反,我发现了如何使用属性来检测这一点
procedure TfrmEditor.BrowserBeforeBrowse(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const request: ICefRequest; isRedirect: Boolean; out Result: Boolean);
begin
case Request.TransitionType of
TT_LINK: begin
// User clicked on link, launch URL...
ShellExecuteW(0, nil, PWideChar(Request.Url), nil, nil, SW_SHOWNORMAL);
Result:= True;
end;
TT_EXPLICIT: begin
// Source is some other "explicit" navigation action such as creating a new
// browser or using the LoadURL function. This is also the default value
// for navigations where the actual type is unknown. Do nothing.
end;
end;
end;
在
OnBeforeBrowse
事件中,检查navType
是否等于navType\u LINKCLICKED
,如果是这样,将结果
参数返回True(这将取消铬请求),并调用例如ShellExecute
传递请求.Url
。这太棒了。你为什么不把这个作为答案贴出来?对你来说太不值得了?:)也许可以在方法的开头添加一个“else Result:=False”?更好的方法可能是Result:=False
,但这不是必需的,因为False是最重要的。当然,您是对的,但是nilled out参数更像是一种隐含的情况,使用Delphi.)