Delphi 如何在默认浏览器中打开chromium浏览器链接上的单击?

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

我想实现这一点,当用户单击TChromium浏览器页面内的超链接时,新页面将在其默认浏览器中打开。

在事件中,检查
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.)