Ouvrir un site web dans le navigateur par défaut depuis une application Firemonkey

Ouvrir une page web depuis un bouton, c'est un classique de la programmation depuis qu'Internet est partout. Pour cela il faut généralement faire un appel au système d'exploitation en lui demandant l'ouverture de la ressource "url" désirée. Il lance alors le butineur par défaut et affiche la page demandée lorsqu'elle existe.

Cette simple fonctionnalité n'est cependant pas toujours aisée à mettre en place.

Avec Firemonkey il faut en effet le faire pour toutes les plateformes gérées : Windows, OS X, iOS et Android. Bien entendu chacune a sa propre façon de lancer un appel système.

Lorsque je me suis posé la question, j'ai commencé par chercher dans la documentation de RAD Studio 10 Seattle sans succès, puis je me suis rabattu sur Google. De nombreux forums traitent de la question, mais aucune solution proposée n'est soit complète, soit d'actualité (certaines unités ayant changé de nom et des fonctions ayant été déplacées entre les dernières versions de RAD Studio ou Delphi).

En rapprochant les bouts de code qui fonctionnent, j'en suis arrivé à cette unité qu'il suffit d'inclure dans un projet Firemonkey.

unit u_urlOpen;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants,
{$IF Defined(IOS)}
  macapi.helpers, iOSapi.Foundation, FMX.helpers.iOS;
{$ELSEIF Defined(ANDROID)}
Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.Net,
   Androidapi.JNI.App,
  Androidapi.helpers;
{$ELSEIF Defined(MACOS)}
Posix.Stdlib;
{$ELSEIF Defined(MSWINDOWS)}
Winapi.ShellAPI, Winapi.Windows;
{$ENDIF}

type
  tUrlOpen = class
    class procedure Open(URL: string);
  end;

implementation

class procedure tUrlOpen.Open(URL: string);
{$IF Defined(ANDROID)}
var
  Intent: JIntent;
{$ENDIF}
begin
{$IF Defined(ANDROID)}
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setData(StrToJURI(URL));
  tandroidhelper.Activity.startActivity(Intent);
  // SharedActivity.startActivity(Intent);
{$ELSEIF Defined(MSWINDOWS)}
  ShellExecute(0, 'OPEN', PWideChar(URL), nil, nil, SW_SHOWNORMAL);
{$ELSEIF Defined(IOS)}
  SharedApplication.OpenURL(StrToNSUrl(URL));
{$ELSEIF Defined(MACOS)}
  _system(PAnsiChar('open ' + AnsiString(URL)));
{$ENDIF}
end;

end.

L'appel se fait simplement par :

tUrlOpen.Open('http://www.developpeur-pascal.fr');

Simple, non ?


A lire aussi

Obtenir le nom de l'appareil sur lequel un programme Delphi s'exécute. (07/12/2017)
Installer les composants de JVESOFT dans Delphi (18/10/2017)
Saisir des textes avec mise en forme et les afficher tels quels grâce aux composants de TMS Software (14/10/2017)
Utilisation des fontes TrueType avec Firemonkey (10/08/2017)
La vérité ne sort pas toujours de la bouche des enfants... méfiez-vous en ! (06/08/2017)
Faire vibrer un smartphone sous iOS ou Android depuis une application développée avec Delphi (18/07/2017)
Afficher un catalogue d'images provenant d'Internet avec Delphi et Firemonkey (17/07/2017)
Ouvrir un site web dans le navigateur par défaut depuis une application Firemonkey (28/05/2017)

Membre du programme MVP.
Membre du programme MVP