Я хочу достичь этого, когда пользователь нажимает на гиперссылку внутри страницы браузера TChromium, новая страница открывается в браузере по умолчанию.Как сделать клик по ссылке браузера хрома открытым в браузере по умолчанию?
ответ
При проверке OnBeforeBrowse
событий, если параметр navType
равен NAVTYPE_LINKCLICKED
, и если да, возвращающие к параметру Result
(который отменит запрос на Chromium) и вызывать, например, ShellExecute
передавая значение request.Url
, чтобы открыть ссылку в браузере пользователя по умолчанию:
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;
mabybe добавить "else Результат: = False" ? – Domus
Лучше может быть 'Результат: = False' в начале метода, но это не обязательно, поскольку False является [' initial result'] (https://code.google.com/p/delphichromiumembedded/source/browse/ ствол/SRC/cefvcl.pas # 644). – TLama
Вы, конечно, правы, но параметр nilled out - это скорее подразумеваемая ситуация, с Delphi. :) – Domus
В CeF3, navType = NAVTYPE_LINKCLICKED
больше не возможно в OnBeforeBrowse
случае, как и в ответ TLama в. Вместо этого, я обнаружил, как это обнаружить с помощью TransitionType
свойства ...
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_LINKCLICKED' и если да, то вернуть Верные' параметра Result' (который отменит запрос для Chromium) и назовите, например, 'ShellExecute' передает' request.Url'. – TLama
Это блестяще. Почему вы не опубликовали это как ответ? Вы слишком недостойны? :) – Domus