aboutsummaryrefslogtreecommitdiff
path: root/files/fr/archive/add-ons
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
commit33058f2b292b3a581333bdfb21b8f671898c5060 (patch)
tree51c3e392513ec574331b2d3f85c394445ea803c6 /files/fr/archive/add-ons
parent8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff)
downloadtranslated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip
initial commit
Diffstat (limited to 'files/fr/archive/add-ons')
-rw-r--r--files/fr/archive/add-ons/api_de_restauration_de_session/index.html82
-rw-r--r--files/fr/archive/add-ons/développement_de_modules_complémentaires/index.html50
-rw-r--r--files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html55
-rw-r--r--files/fr/archive/add-ons/index.html8
-rw-r--r--files/fr/archive/add-ons/installation_d_extensions_et_de_thèmes_depuis_une_page_web/index.html71
-rw-r--r--files/fr/archive/add-ons/paquetage_multi_extensions/index.html78
-rw-r--r--files/fr/archive/add-ons/télécharger_du_json_et_du_javascript_dans_une_extension/index.html17
-rw-r--r--files/fr/archive/add-ons/versions_extension,_mise_à_jour_et_compatibilité/index.html299
8 files changed, 660 insertions, 0 deletions
diff --git a/files/fr/archive/add-ons/api_de_restauration_de_session/index.html b/files/fr/archive/add-ons/api_de_restauration_de_session/index.html
new file mode 100644
index 0000000000..dfae935362
--- /dev/null
+++ b/files/fr/archive/add-ons/api_de_restauration_de_session/index.html
@@ -0,0 +1,82 @@
+---
+title: API de restauration de session
+slug: Archive/Add-ons/API_de_restauration_de_session
+tags:
+ - Extensions
+translation_of: Archive/Add-ons/Session_store_API
+---
+<p><a href="fr/Firefox_2">Firefox 2</a> introduit la sauvegarde de session, une nouvelle fonctionnalité qui permet aux <a href="fr/Extensions">extensions</a> de sauvegarder et restaurer des données entre différentes sessions de Firefox. Une API simple permet aux extensions d'accéder à cette fonctionnalité.
+</p><p>Un des cas où l'utilisation de cette fonctionnalité peut être cruciale pour une extension est que Firefox 2 permet à l'utilisateur d'annuler la fermeture des onglets. Pour récupérer proprement l'état de votre extension lorsqu'un onglet est restauré, celle-ci doit utiliser la méthode <code>setTabValue()</code> de l'API de sauvegarde de session pour enregistrer toutes les données devant pouvoir être restaurées par la suite, puis appeler la méthode <code>getTabValue()</code> pour récupérer ces données lorsque l'onglet est restauré.
+</p><p>L'API de sauvegarde de session est implémentée en utilisant l'interface <code><a href="fr/NsISessionStore">nsISessionStore</a></code>.
+</p>
+<h2 id="Savoir_quand_restaurer" name="Savoir_quand_restaurer">Savoir quand restaurer</h2>
+<p>Chaque fois que Firefox est sur le point de restaurer un onglet, un événement de type <code>SSTabRestoring</code> est généré. Si votre extension doit pouvoir restaurer des données lorsqu'un onglet est récupéré, vous pouvez mettre en place un listener comme ceci :
+</p>
+<pre>function myExtensionHandleRestore(aEvent) {
+ Components.classes["@mozilla.org/consoleservice;1"].
+ getService(Components.interfaces.nsIConsoleService).
+ logStringMessage("Restauration d'onglets");
+};
+
+document.addEventListener("SSTabRestoring", myExtensionHandleRestore, false);
+</pre>
+<p>Il vous suffit de remplacer le contenu de la fonction <code>myExtensionHandleRestore()</code> avec vos propres actions à effectuer lorsque l'onglet est récupéré. Dans cet exemple, l'interface <code><a href="fr/NsIConsoleService">nsIConsoleService</a></code> sert à afficher un message dans <a href="fr/Console_JavaScript">la console JavaScript</a>.
+</p><p>Cet événement est généré juste avant que l'onglet ne soit récupéré. Un événement de type <code>SSTabRestored</code> est déclenché à chaque fois qu'un onglet a fini d'être récupéré.
+</p>
+<h2 id="Le_processus_de_restauration_de_session" name="Le_processus_de_restauration_de_session">Le processus de restauration de session</h2>
+<p>La séquence exacte d'événements qui surviennent lorsqu'une session est en cours de restauration est la suivante :
+</p>
+<ol><li> Un état de session est sur le point d'être restauré. Cela peut se faire au démarrage ou en réponse à une annulation de fermeture d'onglet, puisque les sessions d'onglets fermés sont récupérées onglet par onglet.
+</li><li> De nouvelles fenêtres sont ouvertes si nécessaire (une pour chaque fenêtre qui a été sauvegardée dans l'enregistrement de session), les cookies et la liste des onglets récemment fermés sont restaurés.
+</li></ol>
+<p>Ensuite, les étapes suivantes sont lancées pour chaque onglet récupéré :
+</p>
+<ol><li> Soit un onglet existant est réutilisé, soit un nouvel onglet est créé. Dans ce dernier cas, un événement <code>TabOpen</code> est généré.
+</li><li> Les attributs XUL persistants de l'onglet (ceux dus aux appels de <code><a href="fr/NsISessionStore#persistTabAttribute.28.29">persistTabAttribute()</a></code>) et les permissions sont restaurés.
+</li><li> L'événement <code>SSTabRestoring</code> est généré.
+</li><li> L'onglet reçoit l'indication de l'URL à afficher.
+</li><li> Lorsque la page est chargée, les champs de saisie et les barres de défilement sont restaurés.
+</li><li> Finalement, l'événement <code>SSTabRestored</code> est généré.
+</li></ol>
+<p>Si vous voulez définir des permissions ou manipuler un onglet récupéré avant que la page y soit chargée, vous devrez surveiller <code>SSTabRestoring</code>. Si vous voulez faire une action après le chargement de la page, vous devrez surveiller <code>SSTabRestored</code>.
+</p><p>Ces deux événements sont générés systématiquement pour chaque onglet récupéré. Vous pouvez déterminer quel onglet est concerné par la récupération grâce au champ <code>originalTarget</code> de l'événement.
+</p><p>Il n'y a pas vraiment de moyen pour déterminer quand le dernier onglet a été récupéré à moins de déterminer combien d'onglets doivent être récupérés puis de compter le nombre d'événements <code>SSTabRestored</code>.
+</p>
+<h2 id="Utilisation_de_l.27API_de_restauration_de_session" name="Utilisation_de_l.27API_de_restauration_de_session">Utilisation de l'API de restauration de session</h2>
+<p>Cette section propose quelques exemples simples sur l'emploi de l'API de restauration de session.
+</p>
+<h3 id="Sauvegarder_une_valeur_avec_un_onglet" name="Sauvegarder_une_valeur_avec_un_onglet">Sauvegarder une valeur avec un onglet</h3>
+<p>Le code suivant permet d'attacher un couple clef/valeur à un onglet de telle façon que lorsque l'onglet est récupéré, ce couple le soit également.
+</p>
+<pre class="eval"> var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
+ getService(Components.interfaces.nsISessionStore);
+ var currentTab = getBrowser().selectedTab;
+ var dataToAttach = "Je veux attacher ceci";
+ ss.setTabValue(currentTab, "key-name-here", dataToAttach);
+</pre>
+<p>Ce code définit une valeur de <var>dataToAttach</var> à la clef <code>"key-name-here"</code>. La donnée peut être n'importe quel objet JavaScript.
+</p>
+<h3 id="Lire_une_valeur_sauvegard.C3.A9e" name="Lire_une_valeur_sauvegard.C3.A9e">Lire une valeur sauvegardée</h3>
+<p>Vous pouvez lire une valeur associée à un onglet n'importe quand (que l'onglet soit ou non dans un processus de récupération) en utilisant le code suivant :
+</p>
+<pre class="eval"> var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
+ getService(Components.interfaces.nsISessionStore);
+ var currentTab = getBrowser().selectedTab;
+ var retrievedData = ss.getTabValue(currentTab, "key-name-here");
+</pre>
+<p>Après l'exécution de ce code, la variable <var>retrievedData</var> contient la valeur sauvegardée correspondante à la clef <code>"key-name-here"</code>. La variable <var>retrievedData</var> est indéfinie (<code>undefined</code>) si aucune valeur correspondant à cette clef n'a été sauvegardée.
+</p>
+<h3 id="Effacer_une_valeur_associ.C3.A9e_.C3.A0_un_onglet" name="Effacer_une_valeur_associ.C3.A9e_.C3.A0_un_onglet">Effacer une valeur associée à un onglet</h3>
+<p>Pour effacer une valeur d'un onglet, vous pouvez utiliser un code similaire à celui-ci :
+</p>
+<pre class="eval"> var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
+ getService(Components.interfaces.nsISessionStore);
+ var currentTab = getBrowser().selectedTab;
+ deleteTabValue(currentTab, "key-name-here");
+</pre>
+<h3 id="Remarques" name="Remarques">Remarques</h3>
+<p>Les fonctions de restauration et de lecture des valeurs d'une fenêtre fonctionnent exactement comme les fonctions pour les onglets portant des noms similaires.
+</p>
+<h2 id="Voir_.C3.A9galement" name="Voir_.C3.A9galement">Voir également</h2>
+<p><a href="fr/NsISessionStore">nsISessionStore</a>
+</p>
diff --git a/files/fr/archive/add-ons/développement_de_modules_complémentaires/index.html b/files/fr/archive/add-ons/développement_de_modules_complémentaires/index.html
new file mode 100644
index 0000000000..1be4236d13
--- /dev/null
+++ b/files/fr/archive/add-ons/développement_de_modules_complémentaires/index.html
@@ -0,0 +1,50 @@
+---
+title: Développement de modules complémentaires
+slug: Archive/Add-ons/Développement_de_modules_complémentaires
+translation_of: Archive/Add-ons/Developing_add-ons
+---
+<p>Les logiciels basés sur Mozilla sont typiquement extensibles au travers de modules complémentaires. Trois principaux types de modules existent : les extensions, les thèmes et les plugins. Cette page vous aidera à trouver les informations dont vous aurez besoin pour créer des modules complémentaires pour Firefox, Thunderbird ou d'autres logiciels basés sur la plateforme Mozilla, ainsi que pour les distribuer.</p>
+<table class="mainpage-table">
+ <tbody>
+ <tr>
+ <td colspan="2">
+ <h2 id="Modules_complémentaires">Modules complémentaires</h2>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <dl>
+ <dt>
+ <a class="internal" href="/fr/Soumettre_un_module_compl%C3%A9mentaire_sur_AMO" title="fr/Soumettre un module complémentaire sur AMO">Soumettre un module complémentaire sur AMO</a></dt>
+ <dd>
+ Fournit des informations pour les développeurs de modules afin de les aider à empaqueter et délivrer leur modules. Ces informations concernent notamment addons.mozilla.org, le site de distribution de modules de Mozilla.</dd>
+ <dt>
+ <a class="internal" href="/fr/Extensions" title="fr/Extensions">Extensions</a></dt>
+ <dd>
+ Les extensions ajoutent de nouvelles fonctionnalités à des applications Mozilla comme Firefox, SeaMonkey et Thunderbird. Cela peut aller d'un simple bouton de barre d'outils à une toute nouvelle fonctionnalité.</dd>
+ <dt>
+ <a class="internal" href="/fr/Plugins" title="fr/Plugins">Plugins</a></dt>
+ <dd>
+ Informations sur la manière de créer des plugins, des composants binaires permettant aux logiciels basés sur Mozilla d'afficher du contenu non gérés nativement.</dd>
+ </dl>
+ </td>
+ <td>
+ <dl>
+ <dt>
+ <a class="internal" href="/fr/Th%C3%A8mes" title="fr/Thèmes">Thèmes</a></dt>
+ <dd>
+ Les thèmes permettent aux utilisateurs de personnaliser l'apparence de leur interface dans les applications basées sur Mozilla.</dd>
+ <dt>
+ <a class="internal" href="/fr/Cr%C3%A9ation_de_plugins_OpenSearch_pour_Firefox" title="fr/Création de plugins OpenSearch pour Firefox">Plugins de moteurs de recherche</a></dt>
+ <dd>
+ Firefox permet d'utiliser des plugins de moteurs de recherche, avec lesquels le champ de recherche peut gérer différents moteurs de recherche.</dd>
+ <dt>
+ <a class="internal" href="fr/La%20plateforme" title="fr/The Mozilla platform">La plateforme Mozilla</a></dt>
+ <dd>
+ Informations concernant la plateforme Mozilla, toutes ses technologies et API, ainsi que la manière de les utiliser dans vos propres projets.</dd>
+ </dl>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<p> </p>
diff --git a/files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html b/files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html
new file mode 100644
index 0000000000..146f12cc47
--- /dev/null
+++ b/files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html
@@ -0,0 +1,55 @@
+---
+title: Gestion de suggestions dans les plugins de recherche
+slug: Archive/Add-ons/Gestion_de_suggestions_dans_les_plugins_de_recherche
+tags:
+ - Plugins
+ - Plugins_de_recherche
+translation_of: Archive/Add-ons/Supporting_search_suggestions_in_search_plugins
+---
+<p>MozSearch offre la gestion des suggestions de recherche ; au fur et à mesure que l'utilisateur saisit des caractères dans la barre de recherche, Firefox 2 demande à l'URL spécifiée par le plugin de lui fournir des suggestions de recherche.
+</p><p>Une fois la liste récupérée, elle est affiche dans une liste déroulante en dessous de la barre de recherche, permettant à l'utilisateur de sélectionner une des propositions s'il le souhaite. S'il continue à ajouter des caractères, de nouvelles suggestions sont demandées au moteur de recherche, puis utilisées pour rafraîchir la liste précédente.
+</p><p>Les plugins de recherche Yahoo et Google inclus dans Firefox 2 utilisent la suggestion de recherche.
+</p>
+<h3 id="Impl.C3.A9menter_le_support_de_la_suggestion_dans_le_plugin_de_recherche" name="Impl.C3.A9menter_le_support_de_la_suggestion_dans_le_plugin_de_recherche"> Implémenter le support de la suggestion dans le plugin de recherche </h3>
+<p>Pour offrir des suggestions de recherche, un plugin doit comporter un élément <code>&lt;Url&gt;</code> supplémentaire dont l'attribut <code>type</code> vaut <code>"application/x-suggestions+json"</code>. (Cela signifie que le plugin d'un moteur de recherche offrant des suggestions de recherche contient deux éléments <code>&lt;Url&gt;</code>, l'autre étant l'URL de recherche <code>text/html</code> principale.)
+</p><p>Par exemple, le plugin de recherche Yahoo contient l’élément <code>&lt;Url&gt;</code> suivant :
+</p>
+<pre>&lt;Url type="application/x-suggestions+json" template="http://ff.search.yahoo.com/gossip?output=fxjson&amp;command={searchTerms}"/&gt;
+</pre>
+<p>Si l'utilisateur entre « fir » dans la barre de recherche, puis fait une pause, Firefox remplace <code>{searchTerms}</code> par « fir » et contacte cette URL :
+</p>
+<pre>&lt;Url type="application/x-suggestions+json" template="http://ff.search.yahoo.com/gossip?output=fxjson&amp;command=fir"/&gt;
+</pre>
+<p>Les résultats sont utilisés pour créer la liste de la boite de suggestion.
+</p><p>Consultez <a href="fr/Cr%c3%a9ation_de_plugins_MozSearch">la page de création d'un plugin MozSearch</a> pour plus de détails sur l’implémentation d’un plugin de recherche.
+</p>
+<h3 id="Impl.C3.A9menter_le_support_des_suggestions_de_recherche_sur_le_serveur" name="Impl.C3.A9menter_le_support_des_suggestions_de_recherche_sur_le_serveur"> Implémenter le support des suggestions de recherche sur le serveur </h3>
+<p>La plus grande partie du travail de la suggestion de recherche se passe du coté du serveur. Si vous êtes concepteur de site Web et que vous désirez proposer des suggestions de recherche, vous devez prévoir la possibilité de renvoyer des suggestions correspondant à un terme de recherche avec la <a class="external" href="http://www.json.org/">Notation JSON</a> (en) (JavaScript Object Notation).
+</p><p>Quand le navigateur désire obtenir une liste de correspondances possibles pour un terme recherché, il envoie une requête HTTP GET à l'URL spécifiée dans l'élément <code>&lt;Url&gt;</code>.
+</p><p>Votre serveur doit alors décider des suggestions à faire en utilisant le moyen qu'il jugera adéquat, puis construire un JSON composé d'au minimum deux, et au maximum quatre éléments :
+</p>
+<dl><dt> <b>chaîne de recherche</b>
+</dt><dd> Le premier élément du JSON est le terme de recherche qui a été communiqué au serveur. Cela permet à Firefox de vérifier que les suggestions correspondent au terme de recherche actuel.
+</dd></dl>
+<dl><dt> <b>liste de suggestions</b>
+</dt><dd> Un tableau des termes de recherche suggérés. Le tableau est placé entre crochets. Par exemple : &lt;tt&gt;["terme 1", "terme 2", "terme 3", "terme 4"]&lt;/tt&gt;
+</dd></dl>
+<dl><dt> <b>descriptions</b>
+</dt><dd> Cet élément optionnel est un tableau de descriptions correspondant à chacun des éléments de la <i>liste de suggestions</i>. Il peut s'agir de n'importe quelle information supplémentaire que le moteur de recherche désire voir affichée par le navigateur, comme nombre de résultats disponibles pour une suggestion.
+</dd></dl>
+<div class="note">Les descriptions ne sont pas supportées dans Firefox 2, et sont ignorées lorsqu’elles sont spécifiées.</div>
+<dl><dt> <b>URL spécifiques associées à des requêtes</b>
+</dt><dd> Cet élément optionnel est un tableau d'URL alternatives pour chacune des suggestions de la <i>liste de suggestions</i>. Par exemple, si pour une suggestion donnée vous préférez donner un lien vers une carte plutôt qu'une simple page de résultats de recherche, vous pouvez retourner une URL vers une carte dans ce tableau.
+</dd></dl>
+<dl><dd> Si vous ne spécifiez pas d'URL spécifique pour un élément de la liste de suggestions, c'est la requête par défaut, décrite par l’élément <code>&lt;Url&gt;</code> dans la description XML du plugin, qui sera employée.
+</dd></dl>
+<div class="note">Les URL associées à des requêtes ne sont pas supportées dans Firefox 2, et sont ignorées lorsqu'elles sont spécifiées.</div>
+<p>Ainsi, si le terme de recherche est « fir », et si vous ne désirez renvoyer ni les descriptions, ni les URL associées aux requêtes, vous pouvez renvoyer le JSON suivant :
+</p>
+<pre class="eval">["fir", ["firefox", "first choice", "mozilla firefox"]]
+</pre>
+<p>Remarquez que dans cet exemple, seules la chaîne de recherche et la liste de suggestions sont spécifiées, et les éléments optionnels sont négligés.
+</p><p>Votre liste de suggestions peut comporter autant d'éléments que vous le souhaitez, mais elle devrait être limitée à une longueur raisonnable étant donné que l'affichage doit être rafraîchi au fur et à mesure que l'utilisateur compose son terme de recherche. Enfin, notez que vous êtes entièrement libre quant à la méthode que vous employez pour sélectionner les suggestions à envoyer.
+</p>
+<div class="noinclude">
+</div>
diff --git a/files/fr/archive/add-ons/index.html b/files/fr/archive/add-ons/index.html
new file mode 100644
index 0000000000..d1851bd7ee
--- /dev/null
+++ b/files/fr/archive/add-ons/index.html
@@ -0,0 +1,8 @@
+---
+title: Add-ons
+slug: Archive/Add-ons
+translation_of: Archive/Add-ons
+---
+<p>In progress. Archived add-ons documentation.</p>
+
+<p></p>
diff --git a/files/fr/archive/add-ons/installation_d_extensions_et_de_thèmes_depuis_une_page_web/index.html b/files/fr/archive/add-ons/installation_d_extensions_et_de_thèmes_depuis_une_page_web/index.html
new file mode 100644
index 0000000000..3d0300b2a6
--- /dev/null
+++ b/files/fr/archive/add-ons/installation_d_extensions_et_de_thèmes_depuis_une_page_web/index.html
@@ -0,0 +1,71 @@
+---
+title: Installation d'extensions et de thèmes depuis une page Web
+slug: Archive/Add-ons/Installation_d_extensions_et_de_thèmes_depuis_une_page_Web
+tags:
+ - Extensions
+ - Themes
+translation_of: Archive/Add-ons/Installing_Extensions_and_Themes_From_Web_Pages
+---
+<p>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 id="Exemple_de_script_Web" 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 = {
+ "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;
+}
+--&gt;
+&lt;/script&gt;
+<span class="nowiki">
+ &lt;a href="http://www.example.com/foo.xpi"
+ iconURL="http://www.example.com/foo.png"
+ hash="sha1:28857e60d043447c5f4550853f2d40770b326a13"
+ 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 <code>&lt;a&gt;</code> est le lien d'installation. L'attribut <code>href</code> 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 = {
+ "Foo": { URL: aEvent.target.href,
+ IconURL: aEvent.target.getAttribute("iconURL"),
+ Hash: aEvent.target.getAttribute("hash"),
+ toString: function () { return this.URL; }
+};
+</pre>
+<p>Ceci spécifie le nom (Foo) à 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, une empreinte de contrôle du fichier <code>xpi</code> (pour protéger contre les téléchargements corrompus), 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>{ "Foo": 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 id="Param.C3.A8tres_disponibles_pour_l.27objet_d.27installation" name="Param.C3.A8tres_disponibles_pour_l.27objet_d.27installation">Paramètres disponibles pour l'objet d'installation</h3>
+<p>La méthode <code>InstallTrigger.install</code> accepte un objet JavaScript en paramètre, dont plusieurs propriétés seront utilisées au cours de l'installation.</p>
+<h4 id="URL" name="URL">URL</h4>
+<p>La propriété <code>URL</code> spécifie l'adresse URL du fichier XPI à installer. Cette propriété est obligatoire.</p>
+<h4 id="IconURL" name="IconURL">IconURL</h4>
+<p>La propriété <code>IconURL</code> 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.</p>
+<h4 id="Hash" name="Hash">Hash</h4>
+<p>La propriété <code>Hash</code> 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 <a href="fr/NsICryptoHash">nsICryptoHash</a> peut être utilisée. L'empreinte est spécifiée de la manière <code>fonction de hachage:empreinte de contrôle</code>, par exemple, <code>sha1:28857e60d043447c5f4550853f2d40770b326a13</code>.</p>
+<h4 id="toString.28.29" name="toString.28.29">toString()</h4>
+<p>La propriété <code>toString()</code> 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.</p>
+<h3 id="Th.C3.A8mes" 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 id="Une_note_.C3.A0_propos_d.27updateEnabled.28.29" 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>
+<p></p>
diff --git a/files/fr/archive/add-ons/paquetage_multi_extensions/index.html b/files/fr/archive/add-ons/paquetage_multi_extensions/index.html
new file mode 100644
index 0000000000..946292425d
--- /dev/null
+++ b/files/fr/archive/add-ons/paquetage_multi_extensions/index.html
@@ -0,0 +1,78 @@
+---
+title: Paquetage multi extensions
+slug: Archive/Add-ons/Paquetage_multi_extensions
+tags:
+ - API_du_toolkit
+ - Extensions
+translation_of: Archive/Add-ons/Multiple_Item_Packaging
+---
+<div class="warning">
+<p>From the release of Firefox 53, multiple item extension packages are no longer supported and will not load. As a consequence, these packages are no longer accepted by AMO.</p>
+</div>
+
+<p>Un paquetage multi extensions fournit la possibilité de conditionner plusieurs <a href="/fr/Bundles" title="fr/Bundles">paquets installables</a> qui peuvent alors être chargés et installés par un utilisateur, ou fournis pré-empaquetés avec une application ou un programme externe. Chaque paquetage multi extensions doit utiliser un fichier <a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">install.rdf</a> et a les mêmes exigences et possibilités qu'une <a href="/fr/Empaqueter_une_extension" title="fr/Empaqueter_une_extension">extension</a>, à l'exception de ce qui suit :</p>
+
+<p>Si l'utilisateur installe une version précédente de l'extension, il n'existe aucun moyen de le prévenir ni de l'en empêcher.</p>
+
+<p> </p>
+
+<h3 id="Structure_d.27un_paquetage_multi_extensions" name="Structure_d.27un_paquetage_multi_extensions">Structure d'un paquetage multi extensions</h3>
+
+<p>La structure d'un paquetage multi extensions est la forme simplifiée d'un <a href="/fr/Bundles" title="fr/Bundles">paquet installable</a> et requiert un fichier avec l'extension <code>.xpi</code>. Un paquetage multi extensions peut contenir aussi bien des extensions (fichiers <code>.xpi</code>) que des thèmes (fichiers <code>.jar</code>). La structure de base est indiquée ci-dessous:</p>
+
+<pre class="eval">/<a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">install.rdf</a> <em>Manifeste d'installation</em>
+/extension1.xpi <em><a href="/fr/Empaqueter_une_extension" title="fr/Empaqueter_une_extension">Extension</a></em>
+/extension2.xpi <em><a href="/fr/Empaqueter_une_extension" title="fr/Empaqueter_une_extension">Extension</a></em>
+/theme1.jar <em><a href="/fr/Empaqueter_un_th%C3%A8me" title="fr/Empaqueter_un_thème">Theme</a></em>
+/theme2.jar <em><a href="/fr/Empaqueter_un_th%C3%A8me" title="fr/Empaqueter_un_thème">Theme</a></em>
+...
+</pre>
+
+<p>Le gestionnaire d'extension lira le <a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">manifeste d'installation</a> pour déterminer si c'est un paquetage multi extensions et démarrera alors automatiquement l'installation de chaque paquet qu'il contient. Aucun autre fichiers, hormis le <a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">manifeste d'installation</a> et les fichiers <code>.jar</code> ou <code>.xpi</code>, ne sera extrait ni utilisé.</p>
+
+<h3 id="install.rdf" name="install.rdf"><a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">install.rdf</a></h3>
+
+<p>Un paquetage multi extensions n'a pas les mêmes obligations qu'une <a href="/fr/Empaqueter_une_extension" title="fr/Empaqueter_une_extension">extension</a> pour son <a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">manifeste d'installation</a>. Les seuls éléments requis sont <code>em:id</code>, <code>em:targetApplication</code>, et <code>em:type</code>.</p>
+
+<p>Pour que les gestionnaires d'extensions de Firefox et Thunderbird 1.5 déterminent la nature du paquetage multi extensions, l'élément <code>em:type</code> spécifié dans votre <a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">install.rdf</a> doit être à <code>32</code> et indiqué comme <code>&lt;em:type NC:parseType="Integer"&gt;32&lt;/em:type&gt;</code>. L'espace de nommage XML <code><span class="nowiki">xmlns:NC="http://home.netscape.com/NC-rdf#"</span></code> doit aussi être déclaré dans votre <a href="/fr/Manifestes_d'installation" title="fr/Manifestes_d'installation">install.rdf</a> comme indiqué ci-dessous:</p>
+
+<pre>...
+&lt;RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:NC="http://home.netscape.com/NC-rdf#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
+
+ &lt;Description about="urn:mozilla:install-manifest"&gt;
+ &lt;!-- nsIUpdateItem type for a Multiple Item Package --&gt;
+ &lt;em:type NC:parseType="Integer"&gt;32&lt;/em:type&gt;
+...</pre>
+
+<p>Pour les gestionnaires d'extensions de Firefox et Thunderbird 2.0, vous pouvez utiliser la précédente syntaxe ou <code>&lt;em:type&gt;32&lt;/em:type&gt;</code> comme indiqué ci-dessous:</p>
+
+<pre>...
+&lt;RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
+
+ &lt;Description about="urn:mozilla:install-manifest"&gt;
+ &lt;!-- nsIUpdateItem type for a Multiple Item Package --&gt;
+ &lt;em:type&gt;32&lt;/em:type&gt;
+...</pre>
+
+<p>En spécifiant <code>em:targetApplication</code>, l'élément <code>minVersion</code> indiqué doit être l'élément <code>minVersion</code> le plus élevé et l'élément <code>maxVersion</code> indiqué doit être l'élément <code>maxVersion</code> le plus bas de tous les <a href="/fr/Bundles" title="fr/Bundles">paquets installables</a> par le paquetage multi extensions pour l'élément <code>em:targetApplication</code>. Sinon chaque paquet incompatible ne sera pas installé, à moins qu'un test de compatibilité découvre une information de compatibilité mise à jour qui le rendrait compatible.</p>
+
+<h3 id="Installation" name="Installation">Installation</h3>
+
+<p>L'installation peut être effectuée en utilisant les méthodes existantes pour les extensions/thèmes et la même interface utilisateur est employée pour un paquetage multi extensions (les paquets contenus dans le paquetage multi extensions ne seront pas listés). Cela permet aussi d'afficher l'information de signature pour le paquetage multi extensions.</p>
+
+<p>Si un gestionnaire (le gestionnaire d'extensions/thèmes par exemple) est affiché après le chargement du paquetage multi extensions, le gestionnaire affichera chaque paquet contenu dans celui-ci, de la même manière que si l'utilisateur avait choisi d'installer plusieurs paquets simultanément. Le gestionnaire n'affichera pas le paquetage multi extensions dans la liste des paquets, un fois le chargement terminé du paquetage multi extensions.</p>
+
+<h3 id="R.C3.A9f.C3.A9rences_officielles_de_l.27API_du_toolkit" name="R.C3.A9f.C3.A9rences_officielles_de_l.27API_du_toolkit">Références officielles de l'<a href="/fr/API_du_toolkit" title="fr/API_du_toolkit">API du toolkit</a></h3>
+
+<p></p><p><span class="comment">Official References. Do not add to this list without contacting Benjamin Smedberg. Note that this page is included from the pages listed below. So: Don't Add Breadcrumbs!</span>
+</p>
+<ul><li> <a href="en/Bundles">Structure of an Installable Bundle</a>: describes the common structure of installable bundles, including extensions, themes, and XULRunner applications
+</li><li> <a href="en/Extension_Packaging">Extension Packaging</a>: specific information about how to package extensions
+</li><li> <a href="en/Theme_Packaging">Theme Packaging</a>: specific information about how to package themes
+</li><li> <a href="en/Multiple_Item_Packaging">Multiple-item Extension Packaging</a>: specific information about multiple-item extension XPIs
+</li><li> <a href="en/XUL_Application_Packaging">XUL Application Packaging</a>: specific information about how to package XULRunner applications
+</li><li> <a href="en/Chrome_Registration">Chrome Registration</a>
+</li></ul><p></p>
diff --git a/files/fr/archive/add-ons/télécharger_du_json_et_du_javascript_dans_une_extension/index.html b/files/fr/archive/add-ons/télécharger_du_json_et_du_javascript_dans_une_extension/index.html
new file mode 100644
index 0000000000..bdc5b7d9b5
--- /dev/null
+++ b/files/fr/archive/add-ons/télécharger_du_json_et_du_javascript_dans_une_extension/index.html
@@ -0,0 +1,17 @@
+---
+title: Télécharger du JSON et du JavaScript dans une extension
+slug: Archive/Add-ons/Télécharger_du_JSON_et_du_JavaScript_dans_une_extension
+tags:
+ - AJAX
+ - Extensions
+translation_of: Archive/Add-ons/Downloading_JSON_and_JavaScript_in_extensions
+---
+<p>Une pratique courante utilisée par de nombreuses extensions est d'utiliser <a href="/fr/docs/XMLHttpRequest" title="/fr/docs/XMLHttpRequest">XMLHttpRequest</a> ou un mécanisme similaire pour charger du code JavaScript ou des données au format <a href="/fr/docs/JSON" title="/fr/docs/JSON">JSON</a> depuis un site distant. Le contenu récupéré est ensuite interprété avec la fonction <code><a href="/fr/docs/JavaScript/Reference/Objets_globaux/eval" title="/fr/docs/JavaScript/Reference/Objets_globaux/eval"> eval()</a></code>. Cette pratique est <strong>dangereuse</strong>, et une extension qui l'utiliserait ne pourrait pas franchir l'étape de la revue de code pour être hébergée sur le site <a class="external" href="http://addons.mozilla.org">AMO</a></p>
+<p>Cette pratique est dangereuse car le code ainsi interprété obtient les mêmes droits que l'extension, c'est à dire qu'il a un accès complet au chrome, donc à la machine de l'utilisateur, sur laquelle il peut faire ce qu'il veut. L'extension n'a aucun moyen de s'assurer que le site à partir duquel elle récupère du code ou des données n'a pas été piraté, et que le code récupéré est sans danger. AMO prend ce risque très au sérieux.</p>
+<p>Il existe heureusement un moyen de contourner ce problème.</p>
+<h3 id="Télécharger_du_JSON" name="Télécharger_du_JSON">Télécharger du JSON</h3>
+<p>Pour interpréter des données formatées en JSON, les développeurs ne devraient pas utiliser <code>eval()</code> mais plutôt une des méthodes indiquées sur <a href="/fr/docs/JSON" title="/fr/docs/JSON">cette page</a>. Ces méthodes protègent contre du code malicieux, par exemple en garantissant que l'object JSON ne contient que des propriétés, et qu'aucune de ses éventuelles fonctions ne sera exécutée. Pour décoder du JSON, utilisez une fonction faite pour ça, pas <code>eval()</code> !</p>
+<h3 id="Télécharger_du_JavaScript" name="Télécharger_du_JavaScript">Télécharger du JavaScript</h3>
+<p>Il arrive que du code JavaScript soit téléchargé d'un serveur distant et exécuté dans l'extension. Par exemple si le développeur veut que son extension soit toujours à jour, et ne pas faire appel au mécanisme de mise à jour à chaque modification de code. Dans ce cas, le code téléchargé devrait être exécuté dans un bac à sable pour protéger l'extension et la machine sur laquelle elle s'exécute.</p>
+<p>Pour exécuter ce code dans un environnement protégé, il faut faire appel au composant <code><a href="/Fr/Components.utils.evalInSandbox" title="fr/Components.utils.evalInSandbox">Components.utils.evalInSandbox()</a></code>. Le code JavaScript est exécuté dans un bac à sable avec tous les objets "sûrs" avec lesquels il doit communiquer. Cette méthode n'est cependant pas sans danger, et les développeurs devraient lire attentivement la documentation pour s'assurer que le code non sûr ne risque pas de sortir de ce contexte protégé</p>
+<p></p>
diff --git a/files/fr/archive/add-ons/versions_extension,_mise_à_jour_et_compatibilité/index.html b/files/fr/archive/add-ons/versions_extension,_mise_à_jour_et_compatibilité/index.html
new file mode 100644
index 0000000000..ab057e896c
--- /dev/null
+++ b/files/fr/archive/add-ons/versions_extension,_mise_à_jour_et_compatibilité/index.html
@@ -0,0 +1,299 @@
+---
+title: 'Versions d''une extension, mise à jour et compatibilité'
+slug: 'Archive/Add-ons/Versions_extension,_mise_à_jour_et_compatibilité'
+tags:
+ - Extensions
+translation_of: 'Archive/Add-ons/Extension_Versioning,_Update_and_Compatibility'
+---
+<h2 id="Versions_d.27un_module" name="Versions_d.27un_module">Versions d'un module</h2>
+
+<p>Les modules doivent spécifier leurs versions en utilisant le <a href="fr/Format_de_version_du_toolkit">Format de version du toolkit</a>. Il s'agit approximativement d'une chaîne de caractères découpée par des points, comme par exemple :</p>
+
+<ul>
+ <li>2.0</li>
+ <li>1.0b1</li>
+ <li>3.0pre1</li>
+ <li>5.0.1.2</li>
+</ul>
+
+<div class="note"><strong>Note :</strong> Avant Firefox 1.5, un format de version plus basique était utilisé : major.minor.release.build[+] où seuls des chiffres étaient permis. Le format de version du toolkit gère la numérotation des versions de Firefox mais il permet une plus grande flexibilité.</div>
+
+<h2 id="Comment_les_applications_d.C3.A9terminent_la_compatibilit.C3.A9" name="Comment_les_applications_d.C3.A9terminent_la_compatibilit.C3.A9">Comment les applications déterminent la compatibilité</h2>
+
+<p>Lors de l'installation de modules, les applications regardent les entrées de <code><a href="fr/Install.rdf#targetApplication">targetApplication</a></code> dans le fichier install.rdf du module. L'id de cette entrée doit correspondre exactement à l'id de l'application. De plus, les valeurs <code>minVersion</code> et <code>maxVersion</code> de cette entrée doivent former un intervalle comprenant la version de l'application.</p>
+
+<p>Si l'application possède une entrée <code>targetApplication</code> pour une version incompatible, elle tentera alors d'obtenir des informations de mise à jour à partir de l'<code><a href="fr/Install.rdf#updateURL">updateURL</a></code> du module.</p>
+
+<p>Si le fichier install.rdf contient des entrées <code><a href="fr/Install.rdf#targetPlatform">targetPlatform</a></code>, la plateforme devant faire tourner l'application doit y être listée. Dans le cas contraire, l'installation sera refusée.</p>
+
+<p></p><div class="blockIndicator standardNote standardNoteBlock">
+ <p><a href="https://developer.mozilla.org/fr/docs/Mozilla/Firefox/Releases/3">Note concernant Firefox 3</a></p>
+ <p style="font-weight: 400;">Dans des applications basées sur Gecko 1.9, vous pouvez également utiliser une entrée <code>targetApplication</code> avec une id <code>toolkit@mozilla.org</code>, et des valeurs <code>minVersion</code> et <code>maxVersion</code> qui correspondent à la version du toolkit faisant tourner l'application. Cela vous permet que d'installer votre module sur n'importe quelle application basée sur ce toolkit.</p>
+</div><p></p>
+
+<h3 id="Passer_outre_les_tests_de_compatibilit.C3.A9" name="Passer_outre_les_tests_de_compatibilit.C3.A9">Passer outre les tests de compatibilité</h3>
+
+<p> Pour des besoins de tests, vous pouvez dire à l'application d'ignorer quelque peu les vérifications de compatibilité lors de l'installation de modules. Créez simplement une préférence booléenne <code>extensions.checkCompatibility</code> avec la valeur false.</p>
+
+<div class="note"><strong>Note :</strong> Avant Firefox 1.5, la préférence <code>app.extensions.version</code> servait à outrepasser la version que l'application croyait pouvoir installer normalement.</div>
+
+<h2 id="Choix_de_minVersion_et_maxVersion" name="Choix_de_minVersion_et_maxVersion">Choix de minVersion et maxVersion</h2>
+
+<p><code>minVersion</code> et <code>maxVersion</code> doivent spécifier la plage de versions de l'application sur laquelle vous avez fait des tests. En particulier, vous ne devriez jamais spécifier un <code>maxVersion</code> plus grand que la version actuelle de l'application, puisque vous ne connaissez pas les modifications possibles à venir des API et de l'interface utilisateur. Avec la <a href="#Mise_.C3.A0_jour_de_compatibilit.C3.A9">mise à jour de compatibilité</a>, il n'est pas nécessaire de fournir une version entière nouvelle de l'extension simplement pour augmenter son <code>maxVersion</code>.</p>
+
+<p>Pour la valeur <code>maxVersion</code>, il est généralement permis d'utiliser un * à la place de la version mineure de l'application supportée, par exemple 2.0.0.* signifiera que vous supporterez toutes les mises à jour mineures de la version 2.</p>
+
+<p>N'allez pas imaginer que * dans une version représente n'importe quelle version. Le * représente en fait un nombre infiniment grand et n'a réellement un sens que lorsqu'il est utilisé dans <code>maxVersion</code>. Si vous l'utilisez dans <code>minVersion</code>, vous n'obtiendrez pas le résultat escompté.</p>
+
+<h2 id="V.C3.A9rification_automatique_des_mises_.C3.A0_jour_de_modules" name="V.C3.A9rification_automatique_des_mises_.C3.A0_jour_de_modules">Vérification automatique des mises à jour de modules</h2>
+
+<p>Les applications vont vérifier périodiquement les mises à jour à installer des modules en récupérant le fichier <code><a href="fr/Install.rdf#updateURL">updateURL</a></code>. L'information renvoyée peut servir à prévenir l'utilisateur d'une mise à jour d'un module, aussi bien qu'indiquer à l'application qu'il existe des nouvelles versions d'applications compatibles avec ce module.</p>
+
+<h3 id="Mise_.C3.A0_jour_de_compatibilit.C3.A9" name="Mise_.C3.A0_jour_de_compatibilit.C3.A9">Mise à jour de compatibilité</h3>
+
+<p>Pendant la phase de vérification automatique, les applications examinent à la fois s'il existe des nouvelles versions et des mises à jour de compatibilité concernant la version installée d'un module. Cela signifie que votre manifeste de mise à jour contient une entrée pour la version actuellement installée du module, et l'entrée <code>targetApplication</code> spécifie un maxVersion plus grand, l'application utilisera cette valeur à la place de celle spécifiée dans le fichier install.rdf du module. De ce fait, des modules qui étaient désactivés car incompatibles peuvent s'activer, et des modules qui ne s'installaient normalement pas peuvent être installés.</p>
+
+<h3 id="Format_RDF_de_mise_.C3.A0_jour" name="Format_RDF_de_mise_.C3.A0_jour">Format RDF de mise à jour</h3>
+
+<p>Si vous hébergez l'<code>updateURL</code> de votre module vous-même, vous devrez alors retourner l'information de version dans un format RDF. Vous trouverez ci dessous un exemple de manifeste de mise à jour. Il liste les informations de 2 différentes versions de l'extension ayant pour id <code><a class="link-mailto" href="mailto:foobar@developer.mozilla.org" rel="freelink">foobar@developer.mozilla.org</a></code>. Les versions incluses sont 2.2 et 2.5, et chacune d'elles définit une compatibilité avec les versions de 1.5 à 2.0.0.* de Firefox. Pour la version 2.2, un lien https de mise à jour est employé tandis que pour la version 2.5, c'est un lien régulier http avec un hash pour vérifier le fichier récupéré.</p>
+
+<p>Il est important de récupérer correctement l'attribut about du RDF:Description initial. Cette information précisera de quel type de module il s'agit :</p>
+
+<ul>
+ <li>Pour une extension, il s'agit de <code>urn:mozilla:extension:&lt;id&gt;</code></li>
+ <li>Pour un thème, il s'agit de <code>urn:mozilla:theme:&lt;id&gt;</code></li>
+ <li>Pour tout autre type de module, il s'agit de <code>urn:mozilla:item:&lt;id&gt;</code></li>
+</ul>
+
+<p>Dans chacun des exemples qui vont suivre, la séquence des versions au sein de l'élément &lt;RDF:Seq&gt; est significative, les versions plus récentes devant être présentées après les versions plus anciennes. Il n'est pas nécessaire de lister toutes les versions intermédiaires si la dernière version est fournie.</p>
+
+<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
+
+ &lt;!-- Cette ressource de description inclut toutes les informations de mise à jour
+ et de compatibilité pour un unique module ayant l'id foobar@developer.mozilla.org.
+ Vous pouvez lister plusieurs informations de module dans un même fichier RDF. --&gt;
+ &lt;RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org"&gt;
+ &lt;em:updates&gt;
+ &lt;RDF:Seq&gt;
+
+ &lt;!-- Chaque li est une version différente du même module --&gt;
+ &lt;RDF:li&gt;
+ &lt;RDF:Description&gt;
+ &lt;em:version&gt;2.2&lt;/em:version&gt; &lt;!-- Ceci est le numéro de version du module --&gt;
+
+ &lt;!-- Un targetApplication pour chacune des applications avec laquelle le module est compatible --&gt;
+ &lt;em:targetApplication&gt;
+ &lt;RDF:Description&gt;
+ &lt;em:id&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;/em:id&gt;
+ &lt;em:minVersion&gt;1.5&lt;/em:minVersion&gt;
+ &lt;em:maxVersion&gt;2.0.0.*&lt;/em:maxVersion&gt;
+
+ &lt;!-- Ceci est l'emplacement de téléchargement du module --&gt;
+ &lt;em:updateLink&gt;https://www.mysite.com/foobar2.2.xpi&lt;/em:updateLink&gt;
+
+ &lt;!-- Une page décrivant les nouveautés de la mise à jour --&gt;
+ &lt;em:updateInfoURL&gt;http://www.mysite.com/updateinfo2.2.xhtml&lt;/em:updateInfoURL&gt;
+ &lt;/RDF:Description&gt;
+ &lt;/em:targetApplication&gt;
+ &lt;/RDF:Description&gt;
+ &lt;/RDF:li&gt;
+
+ &lt;RDF:li&gt;
+ &lt;RDF:Description&gt;
+ &lt;em:version&gt;2.5&lt;/em:version&gt;
+ &lt;em:targetApplication&gt;
+ &lt;RDF:Description&gt;
+ &lt;em:id&gt;{ec8030f7-c20a-464f-9b0e-13a3a9e97384}&lt;/em:id&gt;
+ &lt;em:minVersion&gt;1.5&lt;/em:minVersion&gt;
+ &lt;em:maxVersion&gt;2.0.0.*&lt;/em:maxVersion&gt;
+ &lt;em:updateLink&gt;http://www.mysite.com/foobar2.5.xpi&lt;/em:updateLink&gt;
+ &lt;em:updateHash&gt;sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6&lt;/em:updateHash&gt;
+ &lt;/RDF:Description&gt;
+ &lt;/em:targetApplication&gt;
+ &lt;/RDF:Description&gt;
+ &lt;/RDF:li&gt;
+
+ &lt;/RDF:Seq&gt;
+ &lt;/em:updates&gt;
+
+ &lt;!-- Une signature est nécessaire seulement si votre module inclut un updateKey dans
+ son fichier install.rdf. --&gt;
+ &lt;em:signature&gt;MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
+ ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
+ jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
+ BcVq13ad&lt;/em:signature&gt;
+ &lt;/RDF:Description&gt;
+&lt;/RDF:RDF&gt;
+</pre>
+
+<p>Certaines personnes préfèrent le format alternatif suivant (notez que beaucoup d'informations ont été retirées de cet exemple par souci de clarté) :</p>
+
+<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#"&gt;
+
+ &lt;!-- Cette ressource de description inclut toutes les informations de mise à jour
+ et de compatibilité pour un unique module ayant l'id foobar@developer.mozilla.org.
+ Vous pouvez lister plusieurs informations de module dans un même fichier RDF. --&gt;
+ &lt;RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org"&gt;
+ &lt;em:updates&gt;
+ &lt;RDF:Seq&gt;
+ &lt;!-- L'attribut resource pointe vers une entrée RDF:Description correspondante
+ plus bas. L'uri peut être ce que vous voulez --&gt;
+ &lt;RDF:li resource="urn:mozilla:extension:foobar@developer.mozilla.org:2.2"/&gt;
+ &lt;RDF:li resource="urn:mozilla:extension:foobar@developer.mozilla.org:2.5"/&gt;
+ &lt;/RDF:Seq&gt;
+ &lt;/em:updates&gt;
+ &lt;em:signature&gt;MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
+ ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
+ jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
+ BcVq13ad&lt;/em:signature&gt;
+ &lt;/RDF:Description&gt;
+
+ &lt;!-- Ceci représente la même description qu'avec le li de l'exemple précédent --&gt;
+ &lt;RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org:2.2"&gt;
+ &lt;em:version&gt;2.2&lt;/em:version&gt;
+
+ &lt;!-- suppression du contenu ici --&gt;
+
+ &lt;/RDF:Description&gt;
+
+ &lt;RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org:2.5"&gt;
+ &lt;em:version&gt;2.5&lt;/em:version&gt;
+
+ &lt;!-- suppression du contenu ici --&gt;
+
+ &lt;/RDF:Description&gt;
+
+&lt;/RDF:RDF&gt;
+</pre>
+
+<h3 id="Fournir_des_d.C3.A9tails_sur_les_mises_.C3.A0_jour" name="Fournir_des_d.C3.A9tails_sur_les_mises_.C3.A0_jour">Fournir des détails sur les mises à jour</h3>
+
+<p></p>
+
+<h4 id="En_g.C3.A9n.C3.A9ral" name="En_g.C3.A9n.C3.A9ral">En général</h4>
+
+<p>Il est possible de fournir à l'utilisateur quelques détails sur les nouveautés d'une mise à jour d'un module. Ils seront visibles lorsque l'utilisateur reçoit une notification de mise à jour et devraient lui permettre d'avoir un aperçu rapide des nouvelles fonctionnalités et des problèmes de sécurité résolus.</p>
+
+<p>Pour réaliser cela, vous devez ajouter une entrée <code>updateInfoURL</code> à votre manifeste de mise à jour (voir l'exemple plus haut). La page à cette URL sera récupérée et affichée à l'utilisateur. Puisqu'elle est affichée en dehors du contexte d'une page Web normale, son contenu est énormément assaini, ce qui signifie qu'il n'y a pas beaucoup d'options de formatage disponibles et les scripts et images ne sont pas autorisés.</p>
+
+<ul>
+ <li>h1, h2 et h3 pour les en-têtes généraux</li>
+ <li>p pour les paragraphes</li>
+ <li>ul et ol pour les listes.</li>
+</ul>
+
+<p>À l'intérieur des listes, utilisez les balises habituelles <code>li</code> pour chaque item.</p>
+
+<p>À l'intérieur des balises h1, h2, h3, p et li, vous pouvez utiliser :</p>
+
+<ul>
+ <li>b ou strong pour du texte en gras</li>
+ <li>i ou em pour du texte en italique</li>
+</ul>
+
+<p>La page d'information récupérée doit pour l'instant être totalement valide en XHTML, et doit être servie avec le type MIME <code>application/xhtml+xml</code>.</p>
+
+<p>Vous pouvez ajouter <code>%APP_LOCALE%</code> dans votre <code>updateInfoURL</code> si vous désirez que les informations de locale soient fournis dans l'URL — ceci permet de personnaliser le texte selon la locale de l'utilisateur. Vous pouvez également utiliser les autres chaînes de substitution gérées par <code>updateURL</code>, bien qu'elles soient probablement moins utiles.</p>
+
+<h4 id="Ce_que_voit_l.27utilisateur" name="Ce_que_voit_l.27utilisateur">Ce que voit l'utilisateur</h4>
+
+<p>Le contenu de <code>updateInfoURL</code> sera affiché pour l'utilisateur dans la page des modules complémentaires, dans une liste des mises à jour disponibles. L'utilisateur peut ensuite cliquer sur le bouton <strong>Afficher les informations</strong> et verra celles-ci sur le côté droit. (notez que l'intitulé du bouton devient <strong>Masquer les informations</strong>)</p>
+
+<p><img alt="Image:Example_updateInfoURL2.png"></p>
+
+<h3 id="Mises_.C3.A0_jour_s.C3.A9curis.C3.A9es" name="Mises_.C3.A0_jour_s.C3.A9curis.C3.A9es">Mises à jour sécurisées</h3>
+
+<p> </p>
+
+<p>Gecko 1.9 dispose d'un processus supplémentaire destiné à protéger les utilisateurs contre <a class="external" href="http://fr.wikipedia.org/wiki/Attaque_de_l'homme_du_milieu">les attaques de l'homme du milieu</a> ainsi que pendant des mises à jour de modules. Dans le fichier install.rdf du module déjà installé, <code>updateURL</code> doit être défini d'une des façons suivantes :</p>
+
+<ul>
+ <li>L'<code><a href="fr/Install.rdf#updateURL">updateURL</a></code> utilise https, ou il n'y a aucun <code>updateURL</code> (ce qui par défaut correspond à addons.mozilla.org qui est en https)</li>
+ <li>L'<code><a href="fr/Install.rdf#updateURL">updateURL</a></code> utilise http et l'entrée <code><a href="fr/Install.rdf#updateKey">updateKey</a></code> est spécifiée pour permettre de vérifier les données du manifeste d'installation.</li>
+</ul>
+
+<p>Lorsque vous spécifier une <code>updateKey</code> dans install.rdf, vous devez inclure <a href="#Signature_de_manifestes_de_mise_.C3.A0_jour">une signature numérique</a> dans le manifeste de mise à jour ou l'information sera rejetée.</p>
+
+<p>Dans le manifeste de mise à jour délivré par <code>updateURL</code>, <code>updateLink</code> doit être défini d'une des façons suivantes :</p>
+
+<ul>
+ <li>Le lien <code>updateLink</code> vers un fichier XPI doit utiliser https</li>
+ <li>Le lien <code>updateLink</code> peut utiliser http et vous devez inclure une entrée <code><a href="#Hachages_de_mise_.C3.A0_jour">updateHash</a></code> pour le fichier XPI en utilisant des algorithmes de hachage sha1, sha256, sha384 ou sha512.</li>
+</ul>
+
+<p>Toutes les entrées du manifeste de mise à jour qui ne respectent pas ces deux exigences seront ignorées lors de la vérification des nouvelles versions.</p>
+
+<p>Notez que les liens https vers des sites ayant des certificats invalides ou qui redirigent les requêtes vers des sites http échoueront également pour les cas update.rdf et <code>updateLink</code></p>
+
+<h4 id="Hachages_de_mise_.C3.A0_jour" name="Hachages_de_mise_.C3.A0_jour">Hachages de mise à jour</h4>
+
+<p>Afin de vérifier l'intégrité du XPI téléchargé, vous devez fournir une entrée <code>updateHash</code> en même temps que le lien updateLink. Il s'agit d'un hachage généré à partir des données du fichier selon l'un des algorithmes gérés (sha1, sha256, sha384 et sha512). Dans Firefox 3, si la valeur <code>updateLink</code> n'est pas https le hachage doit être fait à l'aide d'un des membres de la famille d'algorithmes sha. L'algorithme de hachage utilisé est placé en préfixe de la chaîne de caractères et séparé par « <code>:</code> ».</p>
+
+<pre> &lt;em:updateHash&gt;sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6&lt;/em:updateHash&gt;
+</pre>
+
+<p></p><div class="note"><strong>Note :</strong> La valeur de <code>updateHash</code>, <strong>doit</strong> commencer par la chaîne de l'algorithme de hachage, une erreur courante est d'effacer le préfixe en mettant à jour la valeur de <code>updateHash</code> : <em><strong>sha1:</strong>78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6</em></div><p></p>
+
+<p>Une erreur est affichée lorsque le hachage d'un fichier téléchargé diffère de son hachage spécifié.</p>
+
+<p>Différents outils peuvent être utilisés pour générer des hachages :</p>
+
+<p>De nombreuses variantes d'Unix fournissent sha1sum, sha256sum et ainsi de suite. Les utilisateurs de Windows peuvent utiliser <a class="external" href="http://beeblebrox.org/hashtab/">HashTab</a> pour une utilisation interactive (hors script de compilation). On pensera aussi aux <a class="external" href="http://gnuwin32.sourceforge.net/packages/coreutils.htm">outils GNU pour Windows</a> (en dehors des classiques comme Cygwin), qui peuvent servir en utilisation non interactive :</p>
+
+<pre class="eval">sha1sum FICHIER
+</pre>
+
+<p>On peut encore citer <a class="external" href="http://md5deep.sourceforge.net/">md5deep</a>, qui est multiplateforme :</p>
+
+<pre class="eval">sha1deep FICHIER
+</pre>
+
+<p>OpenSSL peut également générer des hachages :</p>
+
+<pre class="eval">openssl sha1 FICHIER
+</pre>
+
+<p>Sous Windows, <a class="external" href="http://beeblebrox.org/hashtab/">HashTab</a> peut servir d'extension au shell… un clic droit vous donnera des valeurs de hachage pour n'importe quel fichier.</p>
+
+<p>De plus, un <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=395368">bug d'amélioration est ouvert</a> pour ajouter une génération automatique de hachages pour les fichiers XPI à l'outil McCoy.</p>
+
+<p>Enfin, tous les langages (de script) populaires offrent cette fonctionnalité, par exemple : <a class="external" href="http://docs.python.org/lib/module-hashlib.html">Python</a>, Perl: CPAN Digest, <a class="external" href="http://de2.php.net/sha1_file">PHP</a>.</p>
+
+<h4 id="Signature_de_manifestes_de_mise_.C3.A0_jour" name="Signature_de_manifestes_de_mise_.C3.A0_jour">Signature de manifestes de mise à jour</h4>
+
+<p> </p>
+
+<p>Si vous souhaitez servir votre RDF de mise à jour depuis un serveur http classique, les applications basées sur Gecko 1.9 auront besoin que vous signez numériquement le manifeste de mise à jour pour garantir que l'information n'est pas altérée entre le moment où vous l'avez créée et celui où les applications la récupèrent. L'outil <a href="fr/McCoy">McCoy</a> doit être utilisé pour signer le RDF de mise à jour.</p>
+
+<p>Les détails techniques du mécanisme de signature dépasse le cadre de ce document, toutefois les bases sont les suivantes :</p>
+
+<h5 id="Premi.C3.A8re_.C3.A9tape_.E2.80.94_.C3.A0_faire_une_seule_fois.2C_avant_de_publier_le_module" name="Premi.C3.A8re_.C3.A9tape_.E2.80.94_.C3.A0_faire_une_seule_fois.2C_avant_de_publier_le_module">Première étape — à faire une seule fois, avant de publier le module</h5>
+
+<p>L'objectif et d'ajouter <code><a href="fr/Install.rdf#updateKey">updateKey</a></code> au fichier install.rdf.</p>
+
+<p>L'auteur du module crée une paire de clés cryptée RSA publique/privée.</p>
+
+<p>La partie publique de la clé est encodée en DER et encodée en base 64, puis ajoutée au fichier install.rdf du module dans l'entrée <code><a href="fr/Install.rdf#updateKey">updateKey</a></code>.</p>
+
+<h5 id="Deuxi.C3.A8me_.C3.A9tape_.E2.80.94_.C3.A0_faire_.C3.A0_chaque_modification_du_fichier_.C2.AB_update.rdf.E2.80.89.C2.BB" name="Deuxi.C3.A8me_.C3.A9tape_.E2.80.94_.C3.A0_faire_.C3.A0_chaque_modification_du_fichier_.C2.AB_update.rdf.E2.80.89.C2.BB">Deuxième étape — à faire à chaque modification du fichier « update.rdf »</h5>
+
+<p>L'objectif est de définir la valeur de <code><a href="fr/Update.rdf#signature">signature</a></code> dans update.rdf.</p>
+
+<p>Lorsque l'auteur crée le fichier rdf de mise à jour, un outil sert à le signer en utilisant la partie privée de la clé. Plus simplement, l'information de mise à jour est convertie en chaîne de caractères, puis hachée par un algorithme sha512 et le hachage obtenu est signé grâce à la clé privée. La donnée résultante est encodée en DER, puis encodée en base 64 pour être inclue dans update.rdf et comme une entrée de <code><a href="fr/Update.rdf#signature">signature</a></code>.</p>
+
+<h2 id="D.C3.A9bogage_et_r.C3.A9solution_de_probl.C3.A8mes" name="D.C3.A9bogage_et_r.C3.A9solution_de_probl.C3.A8mes">Débogage et résolution de problèmes</h2>
+
+<p>Les mécanismes de mise à jour peuvent envoyer des informations à la console, et afficher différentes informations pouvant vous aider à résoudre un problème. Pour activer l'affichage des messages :</p>
+
+<ol>
+ <li>Définissez la valeur de <strong>extensions.logging.enabled</strong> à <strong>true</strong> (en utilisant l'URL <code>about:config</code>).</li>
+ <li>Lancez Firefox en ligne de commande avec l'option <code>-console</code></li>
+</ol>
+
+<p>Si vous rencontrez des problèmes, examinez la sortie en console pour l'id de votre extension, et regardez si des erreurs ont été enregistrées.</p>