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

  • Raccourci de la révision : Installation_d'extensions_et_de_thèmes_depuis_une_page_Web
  • Titre de la révision : Installation d'extensions et de thèmes depuis une page Web
  • ID de la révision : 261485
  • Créé :
  • Créateur : Fredchat
  • Version actuelle ? Non
  • Commentaire /* A besoin d'une mise à jour */

Contenu de la révision

{{template.NeedsUpdate("Installing Extensions and Themes From Web Pages")}} 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 = {
    "Bar": { URL: aEvent.target.href,
             IconURL: aEvent.target.getAttribute("iconURL"),
             toString: function () { return this.URL; }
    }
  };
  InstallTrigger.install(params);

  return false;
}
-->
</script>

 <a href="http://www.foo.com/bar.xpi"
   iconURL="http://www.foo.com/bar.png"
   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 = {
  "MonExtension": { URL: aEvent.target.href,
           IconURL: aEvent.target.getAttribute("iconURL"),
           toString: function () { return this.URL; }
};

Ceci spécifie le nom (MonExtension) à 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, 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 ({ "MonExtension": 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.

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.)

{{ wiki.languages( { "en": "en/Installing_Extensions_and_Themes_From_Web_Pages", "ja": "ja/Installing_Extensions_and_Themes_From_Web_Pages" } ) }}

Source de la révision

<p>
{{template.NeedsUpdate("Installing Extensions and Themes From Web Pages")}}
Il existe de nombreuses façons d'installer des <a href="fr/Extensions">extensions</a> et des <a href="fr/Th%c3%a8mes">thèmes</a> depuis des pages Web, parmi lesquelles un lien direct vers les fichiers XPI et l'utilisation de l'objet <a href="fr/R%c3%a9f%c3%a9rence_de_l'API_XPInstall/Objet_InstallTrigger">InstallTrigger</a>.
</p><p>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.
</p>
<h3 name="Exemple_de_script_Web"> Exemple de script Web </h3>
<pre class="eval">&lt;script type="application/x-javascript"&gt;
&lt;!--
function install (aEvent)
{
  var params = {
    "Bar": { URL: aEvent.target.href,
             IconURL: aEvent.target.getAttribute("iconURL"),
             toString: function () { return this.URL; }
    }
  };
  InstallTrigger.install(params);

  return false;
}
--&gt;
&lt;/script&gt;
<span class="plain">
 &lt;a href="http://www.foo.com/bar.xpi"
   iconURL="http://www.foo.com/bar.png"
   onclick="return install(event);"&gt;Installer l'extension&lt;/a&gt;
 </span>
</pre>
<p>Examinons ce code pièce par pièce. L'élément HTML &lt;a&gt; 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... »
</p><p>Lorsqu'on clique sur le lien, il appelle la fonction <code>install</code> en passant l'objet d'évènement en paramètre.
</p><p>L'installation crée d'abord un bloc de paramètres :
</p>
<pre class="eval">var params = {
  "MonExtension": { URL: aEvent.target.href,
           IconURL: aEvent.target.getAttribute("iconURL"),
           toString: function () { return this.URL; }
};
</pre>
<p>Ceci spécifie le nom (MonExtension) à afficher dans le dialogue de confirmation, l'URL où trouver l'extension (qui, souvenez-vous, est l'attribut <code>href</code> du lien), l'URL de l'icône à afficher dans le dialogue de confirmation, et une fonction <code>toString</code> 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 (<code>{ "MonExtension": aEvent.target.href  }</code>) si vous le désirez et que vous n'avez pas d'icône à afficher dans le dialogue de confirmation.
</p><p><code>InstallTrigger.install</code> est ensuite appelée pour installer l'élément défini dans le bloc de paramètres.
</p>
<pre class="eval">return false;
</pre>
<p>Cette dernière partie est la plus importante : la fonction d'installation doit renvoyer <code>false</code> 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 <code>InstallTrigger</code> et l'autre en essayant de charger directement le fichier XPI.
</p>
<h3 name="Th.C3.A8mes"> Thèmes </h3>
<p>À peu près tout ce qui est décrit ci-dessus s'applique également aux thèmes, sauf qu'il faut utiliser la fonction <code>installChrome</code>. 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 <code>InstallTrigger</code> pour installer des thèmes.
</p>
<h3 name="Une_note_.C3.A0_propos_d.27updateEnabled.28.29"> Une note à propos d'updateEnabled() </h3>
<p><code>InstallTrigger</code> expose une fonction appelée <code>updateEnabled</code> que certains peuvent être tentés d'appeler avant <code>InstallTrigger.install</code>. Ce n'est pas nécessaire étant donné que l'installation appelle elle-même <code>updateEnabled</code> en interne. De plus, l'appel à <code>updateEnabled</code> 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 <code>installChrome</code> est appelé, ou lorsqu'un fichier XPI est chargé. Donc, si vous avez du code qui ressemble à ceci :
</p>
<pre class="eval">if (InstallTrigger.updateEnabled())
  InstallTrigger.install({"MonExtension": "foo.xpi"});
</pre>
<p>... et que votre site n'est pas dans la liste blanche, lorsque l'utilisateur déclenchera ce code, <code>updateEnabled</code> renverra <code>false</code> étant donné que votre site n'est pas dans la liste autorisée, et puisque c'est <code>updateEnabled</code> qui a fait ce constat et pas une demande d'installation, l'utilisateur ne verra rien du tout se produire.
</p><p>Par conséquent, vous devriez uniquement utiliser <code>updateEnabled</code> 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.
</p><p>(* 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.)
</p>{{ wiki.languages( { "en": "en/Installing_Extensions_and_Themes_From_Web_Pages", "ja": "ja/Installing_Extensions_and_Themes_From_Web_Pages" } ) }}
Revenir à cette révision