6 votes

Ouverture du lien TWebBrowser dans le navigateur par défaut

Mon application affiche une petite bannière chargée depuis le web dans un contrôle TWebBrowser. Cette bannière est en fait une page HTML comprenant une image; quand les utilisateurs cliquent sur l'image, cela les amène à la campagne promotionnelle que nous menons actuellement.

Le problème ici est que lorsque les utilisateurs cliquent sur le lien dans TWebBrowser, la page de la campagne s'ouvre dans Internet Explorer, et non dans leur navigateur par défaut. Je sais que cela se produit car TWebBrowser est un contrôle basé sur IE, mais y a-t-il un moyen d'ouvrir le lien dans le navigateur choisi par les utilisateurs?

Merci.

9voto

Remy Lebeau Points 130112

Dans l'événement OnBeforeNavigate2, vérifiez l'URL demandée et si c'est celle que vous voulez lancer, puis Stop() la navigation en cours et appelez ShellExecute() pour lancer l'URL dans le navigateur externe par défaut de l'utilisateur.

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; pDisp: IDispatch; var URL: Variant; var Flags: Variant; var TargetFrameName: Variant; var PostData: Variant; var Headers: Variant; var Cancel: WordBool);
begin  
  if (L'URL doit être lancée) then
  begin
    Cancel := True;
    WebBrowser1.Stop;
    ShellExecute(0, nil, PChar(String(Url)), nil, nil, SW_SHOWNORMAL);
  end;
end;

3voto

Sheng Jiang 蒋晟 Points 11113

TWebBrowser expose DWebBrowserExents2::NewWindow2 via its own NewWindow2 event

Alors, gérez l'événement et fournissez l'interface d'automatisation à l'expéditeur de l'événement

procedure TForm1.WebBrowser1NewWindow2(
    ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool);
begin  
// créer un nouveau navigateur (par exemple, hébergé sur un nouvel onglet / formulaire MDI / fenêtre de niveau supérieur)
// et exposer le navigateur en tant que propriété de la nouvelle fenêtre. 
// Ici, un objet form2 est créé pour héberger la nouvelle instance de navigateur web
...
form2.InitNavigate=False;//la navigation sera déclenchée après cet événement
form2.Visible=False;//la nouvelle fenêtre est uniquement pour obtenir l'URL
ppDisp := form2.WebBrowser1.Application;  
form2.Show;
end;

Maintenant vous pouvez obtenir l'URL de la nouvelle fenêtre dans le gestionnaire d'événements BeforeNavigate2 sur form2. Annulez l'événement et vous pouvez utiliser ShellExecute pour lancer le navigateur par défaut.

Si vous ne prenez en charge que Windows SP SP2 ou supérieur, vous pouvez accrocher l'événement NewWindow3 qui fournit l'URL dans les arguments avant la création de la nouvelle fenêtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X