Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Installation d'extensions et de thèmes depuis une page Web

Il existe de nombreuses façons d'installer des extensions et des thèmes depuis des pages Web, parmi lesquelles un lien direct vers les fichiers XPI et l'utilisation de l'objet InstallTrigger.

Les auteurs d'extensions et de pages Web sont encouragés à utiliser la méthode décrite ci-dessous pour installer des fichiers XPI, c'est celle qui est la plus agréable pour l'utilisateur.

Exemple de script Web

<script type="application/x-javascript">
<!--
function install (aEvent)
{
  var params = {
    "Foo": { URL: aEvent.target.href,
             IconURL: aEvent.target.getAttribute("iconURL"),
             Hash: aEvent.target.getAttribute("hash"),
             toString: function () { return this.URL; }
    }
  };
  InstallTrigger.install(params);

  return false;
}
-->
</script>

 <a href="https://www.example.com/foo.xpi"
   iconURL="https://www.example.com/foo.png"
   hash="sha1:28857e60d043447c5f4550853f2d40770b326a13"
   onclick="return install(event);">Installer l'extension</a>
 

Examinons ce code pièce par pièce. L'élément HTML <a> est le lien d'installation. L'attribut href contient un lien direct vers le fichier XPI de l'extension, c'est ce qui sera affiché dans la barre d'adresse lorsque le pointeur survole le lien. Les visiteurs peuvent enregistrer le fichier XPI sur leur disque facilement en cliquant dessus et en choisissant « Enregistrer sous… »

Lorsqu'on clique sur le lien, il appelle la fonction install en passant l'objet d'évènement en paramètre.

L'installation crée d'abord un bloc de paramètres :

var params = {
  "Foo": { URL: aEvent.target.href,
           IconURL: aEvent.target.getAttribute("iconURL"),
           Hash: aEvent.target.getAttribute("hash"),
           toString: function () { return this.URL; }
};

Ceci spécifie le nom (Foo) à afficher dans le dialogue de confirmation, l'URL où trouver l'extension (qui, souvenez-vous, est l'attribut href du lien), l'URL de l'icône à afficher dans le dialogue de confirmation, une empreinte de contrôle du fichier xpi (pour protéger contre les téléchargements corrompus), et une fonction toString qui permettra à ce code de fonctionner avec les versions 0.8 et antérieures de Firefox. Vous pouvez également utiliser l'ancien style de bloc de paramètres ({ "Foo": aEvent.target.href  }) si vous le désirez et que vous n'avez pas d'icône à afficher dans le dialogue de confirmation.

InstallTrigger.install est ensuite appelée pour installer l'élément défini dans le bloc de paramètres.

return false;

Cette dernière partie est la plus importante : la fonction d'installation doit renvoyer false afin que, lorsqu'on clique sur le lien, seul le script soit exécuté et le href du lien ne soit pas chargé dans le navigateur. Si vous oubliez cette étape, l'utilisateur risque de voir deux dialogues d'installation, étant donné que vous avez effectivement invoqué deux requêtes d'installation : une avec InstallTrigger et l'autre en essayant de charger directement le fichier XPI.

Paramètres disponibles pour l'objet d'installation

La méthode InstallTrigger.install accepte un objet JavaScript en paramètre, dont plusieurs propriétés seront utilisées au cours de l'installation.

URL

La propriété URL spécifie l'adresse URL du fichier XPI à installer. Cette propriété est obligatoire.

IconURL

La propriété IconURL indique une icône à utiliser dans le dialogue d'installation. Cette propriété est facultative. Si aucune icône n'est spécifiée, l'icône par défaut sera utilisée, habituellement une pièce de puzzle verte. L'icône peut être dans n'importe quel format d'image accepté par Firefox, et doit être d'une taille de 32×32 pixels.

Hash

La propriété Hash spécifie une empreinte cryptographique du contenu du fichier XPI. Celle-ci est utilisée pour vérifier le fichier téléchargé, pour empêcher d'installer, par exemple, un fichier corrompu servi par un serveur de téléchargement miroir. Toute fonction de hachage supportée par nsICryptoHash peut être utilisée. L'empreinte est spécifiée de la manière fonction de hachage:empreinte de contrôle, par exemple, sha1:28857e60d043447c5f4550853f2d40770b326a13.

toString()

La propriété toString() devrait renvoyer l'URL du fichier XPI, pour la compatibilité avec les versions de Firefox antérieures à 1.0, et d'autres applications comme Seamonkey.

Thèmes

À peu près tout ce qui est décrit ci-dessus s'applique également aux thèmes, sauf qu'il faut utiliser la fonction installChrome. Comme beaucoup de sites installaient des extensions en donnant un lien direct vers un fichier XPI en se reposant sur la gestion de contenu interne au navigateur pour invoquer la fenêtre de confirmation, certains procèdent (incorrectement) de même pour les fichiers JAR de thèmes et se demandent pourquoi ils ne sont pas détectés et installés automatiquement. En fait, XPI est une extension spécifique à Mozilla, et ce format peut donc être géré de façon spéciale, mais ce n'est pas le cas de JAR. Tous les fichiers .jar ne sont pas des thèmes pour Firefox, donc si vous cliquez sur un lien vers un .jar vous verrez un dialogue d'enregistrement de fichier. Pour cette raison, vous devriez toujours utiliser l'API InstallTrigger pour installer des thèmes.

Une note à propos d'updateEnabled()

InstallTrigger expose une fonction appelée updateEnabled que certains peuvent être tentés d'appeler avant InstallTrigger.install. Ce n'est pas nécessaire étant donné que l'installation appelle elle-même updateEnabled en interne. De plus, l'appel à updateEnabled peut causer des problèmes si votre site de distribution n'est pas dans la liste blanche de l'utilisateur, parce que Firefox affiche le message « Installation bloquée » uniquement lorsque installChrome est appelé, ou lorsqu'un fichier XPI est chargé. Donc, si vous avez du code qui ressemble à ceci :

if (InstallTrigger.updateEnabled())
  InstallTrigger.install({"MonExtension": "foo.xpi"});

… et que votre site n'est pas dans la liste blanche, lorsque l'utilisateur déclenchera ce code, updateEnabled renverra false étant donné que votre site n'est pas dans la liste autorisée, et puisque c'est updateEnabled qui a fait ce constat et pas une demande d'installation, l'utilisateur ne verra rien du tout se produire.

Par conséquent, vous devriez uniquement utiliser updateEnabled pour afficher du contenu dans la page pour avertir l'utilisateur que l'installation est désactivée, ou que votre site n'est pas dans la liste blanche, et ne pas le placer dans le chemin de code menant à l'installation.

(* de toute manière, ceci ne doit pas vous empêcher de développer des systèmes d'installation plus ambitieux, cette documentation est uniquement fournie comme un guide dans l'espoir que la plupart des distributeurs d'extensions l'utiliseront. Elle se comporte en effet bien dans la plupart des cas.)

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : Jeremie, BenoitL, Fredchat, Mgjbot, Cariboo, Mozinet
 Dernière mise à jour par : Jeremie,