2014-09-02 1 views
3

Je veux y parvenir lorsqu'un utilisateur clique sur un lien hypertexte dans une page de navigateur TChromium, la nouvelle page s'ouvre dans son navigateur par défaut.Comment faire un clic sur un lien du navigateur Chrome ouvert dans le navigateur par défaut?

+3

Dans le contrôle des événements 'OnBeforeBrowse' si le' 'navType' est égal à NAVTYPE_LINKCLICKED' et si oui, vrai retour au paramètre' Result' (qui annulera la demande pour Chromium) et appellera par exemple 'ShellExecute' en passant le' request.Url'. – TLama

+2

C'est génial. Pourquoi n'avez-vous pas posté cela comme réponse? Trop indigne pour toi? :) – Domus

Répondre

4

Dans le contrôle des événements OnBeforeBrowse si le paramètre est égal à navTypeNAVTYPE_LINKCLICKED et si oui, vrai retour au paramètre Result (qui annulera la demande de chrome) et appellent par exemple ShellExecute passer la valeur request.Url pour ouvrir le lien dans le navigateur par défaut de l'utilisateur:

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; 
+0

mabybe ajouter un "else Résultat: = False" ? – Domus

+0

Mieux pourrait être 'Result: = False' au début de la méthode, mais ce n'est pas nécessaire puisque False est le [' result initial'] (https://code.google.com/p/delphichromiumembedded/source/browse/ trunk/src/cefvcl.pas # 644). – TLama

+1

Vous avez bien sûr raison, mais un paramètre Nilled est plus une situation implicite, avec Delphi. :) – Domus

2

En CeF3, navType = NAVTYPE_LINKCLICKED n'est plus possible en cas OnBeforeBrowse, comme dans la réponse de TLama. Au lieu de cela, j'ai découvert comment détecter cette propriété en utilisant la 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; 
Questions connexes