From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../api_de_restauration_de_session/index.html | 82 ++++++ .../index.html" | 50 ++++ .../index.html | 55 ++++ files/fr/archive/add-ons/index.html | 8 + .../index.html" | 71 +++++ .../add-ons/paquetage_multi_extensions/index.html | 78 ++++++ .../index.html" | 17 ++ .../index.html" | 299 +++++++++++++++++++++ 8 files changed, 660 insertions(+) create mode 100644 files/fr/archive/add-ons/api_de_restauration_de_session/index.html create mode 100644 "files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" create mode 100644 files/fr/archive/add-ons/gestion_de_suggestions_dans_les_plugins_de_recherche/index.html create mode 100644 files/fr/archive/add-ons/index.html create mode 100644 "files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_depuis_une_page_web/index.html" create mode 100644 files/fr/archive/add-ons/paquetage_multi_extensions/index.html create mode 100644 "files/fr/archive/add-ons/t\303\251l\303\251charger_du_json_et_du_javascript_dans_une_extension/index.html" create mode 100644 "files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" (limited to 'files/fr/archive/add-ons') 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 +--- +

Firefox 2 introduit la sauvegarde de session, une nouvelle fonctionnalité qui permet aux extensions de sauvegarder et restaurer des données entre différentes sessions de Firefox. Une API simple permet aux extensions d'accéder à cette fonctionnalité. +

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 setTabValue() 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 getTabValue() pour récupérer ces données lorsque l'onglet est restauré. +

L'API de sauvegarde de session est implémentée en utilisant l'interface nsISessionStore. +

+

Savoir quand restaurer

+

Chaque fois que Firefox est sur le point de restaurer un onglet, un événement de type SSTabRestoring 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 : +

+
function myExtensionHandleRestore(aEvent) {
+  Components.classes["@mozilla.org/consoleservice;1"].
+             getService(Components.interfaces.nsIConsoleService).
+             logStringMessage("Restauration d'onglets");
+};
+
+document.addEventListener("SSTabRestoring", myExtensionHandleRestore, false);
+
+

Il vous suffit de remplacer le contenu de la fonction myExtensionHandleRestore() avec vos propres actions à effectuer lorsque l'onglet est récupéré. Dans cet exemple, l'interface nsIConsoleService sert à afficher un message dans la console JavaScript. +

Cet événement est généré juste avant que l'onglet ne soit récupéré. Un événement de type SSTabRestored est déclenché à chaque fois qu'un onglet a fini d'être récupéré. +

+

Le processus de restauration de session

+

La séquence exacte d'événements qui surviennent lorsqu'une session est en cours de restauration est la suivante : +

+
  1. 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. +
  2. 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. +
+

Ensuite, les étapes suivantes sont lancées pour chaque onglet récupéré : +

+
  1. Soit un onglet existant est réutilisé, soit un nouvel onglet est créé. Dans ce dernier cas, un événement TabOpen est généré. +
  2. Les attributs XUL persistants de l'onglet (ceux dus aux appels de persistTabAttribute()) et les permissions sont restaurés. +
  3. L'événement SSTabRestoring est généré. +
  4. L'onglet reçoit l'indication de l'URL à afficher. +
  5. Lorsque la page est chargée, les champs de saisie et les barres de défilement sont restaurés. +
  6. Finalement, l'événement SSTabRestored est généré. +
+

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 SSTabRestoring. Si vous voulez faire une action après le chargement de la page, vous devrez surveiller SSTabRestored. +

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 originalTarget de l'événement. +

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 SSTabRestored. +

+

Utilisation de l'API de restauration de session

+

Cette section propose quelques exemples simples sur l'emploi de l'API de restauration de session. +

+

Sauvegarder une valeur avec un onglet

+

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

+
 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);
+
+

Ce code définit une valeur de dataToAttach à la clef "key-name-here". La donnée peut être n'importe quel objet JavaScript. +

+

Lire une valeur sauvegardée

+

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 : +

+
 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");
+
+

Après l'exécution de ce code, la variable retrievedData contient la valeur sauvegardée correspondante à la clef "key-name-here". La variable retrievedData est indéfinie (undefined) si aucune valeur correspondant à cette clef n'a été sauvegardée. +

+

Effacer une valeur associée à un onglet

+

Pour effacer une valeur d'un onglet, vous pouvez utiliser un code similaire à celui-ci : +

+
 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
+                             getService(Components.interfaces.nsISessionStore);
+ var currentTab = getBrowser().selectedTab;
+ deleteTabValue(currentTab, "key-name-here");
+
+

Remarques

+

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

+

Voir également

+

nsISessionStore +

diff --git "a/files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" "b/files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/index.html" new file mode 100644 index 0000000000..1be4236d13 --- /dev/null +++ "b/files/fr/archive/add-ons/d\303\251veloppement_de_modules_compl\303\251mentaires/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 +--- +

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.

+ + + + + + + + + + +
+

Modules complémentaires

+
+
+
+ Soumettre un module complémentaire sur AMO
+
+ 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.
+
+ Extensions
+
+ 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é.
+
+ Plugins
+
+ 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.
+
+
+
+
+ Thèmes
+
+ Les thèmes permettent aux utilisateurs de personnaliser l'apparence de leur interface dans les applications basées sur Mozilla.
+
+ Plugins de moteurs de recherche
+
+ Firefox permet d'utiliser des plugins de moteurs de recherche, avec lesquels le champ de recherche peut gérer différents moteurs de recherche.
+
+ La plateforme Mozilla
+
+ Informations concernant la plateforme Mozilla, toutes ses technologies et API, ainsi que la manière de les utiliser dans vos propres projets.
+
+
+

 

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 +--- +

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

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

Les plugins de recherche Yahoo et Google inclus dans Firefox 2 utilisent la suggestion de recherche. +

+

Implémenter le support de la suggestion dans le plugin de recherche

+

Pour offrir des suggestions de recherche, un plugin doit comporter un élément <Url> supplémentaire dont l'attribut type vaut "application/x-suggestions+json". (Cela signifie que le plugin d'un moteur de recherche offrant des suggestions de recherche contient deux éléments <Url>, l'autre étant l'URL de recherche text/html principale.) +

Par exemple, le plugin de recherche Yahoo contient l’élément <Url> suivant : +

+
<Url type="application/x-suggestions+json" template="http://ff.search.yahoo.com/gossip?output=fxjson&command={searchTerms}"/>
+
+

Si l'utilisateur entre « fir » dans la barre de recherche, puis fait une pause, Firefox remplace {searchTerms} par « fir » et contacte cette URL : +

+
<Url type="application/x-suggestions+json" template="http://ff.search.yahoo.com/gossip?output=fxjson&command=fir"/>
+
+

Les résultats sont utilisés pour créer la liste de la boite de suggestion. +

Consultez la page de création d'un plugin MozSearch pour plus de détails sur l’implémentation d’un plugin de recherche. +

+

Implémenter le support des suggestions de recherche sur le serveur

+

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 Notation JSON (en) (JavaScript Object Notation). +

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 <Url>. +

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 : +

+
chaîne de recherche +
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. +
+
liste de suggestions +
Un tableau des termes de recherche suggérés. Le tableau est placé entre crochets. Par exemple : <tt>["terme 1", "terme 2", "terme 3", "terme 4"]</tt> +
+
descriptions +
Cet élément optionnel est un tableau de descriptions correspondant à chacun des éléments de la liste de suggestions. 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. +
+
Les descriptions ne sont pas supportées dans Firefox 2, et sont ignorées lorsqu’elles sont spécifiées.
+
URL spécifiques associées à des requêtes +
Cet élément optionnel est un tableau d'URL alternatives pour chacune des suggestions de la liste de suggestions. 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. +
+
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 <Url> dans la description XML du plugin, qui sera employée. +
+
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.
+

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 : +

+
["fir", ["firefox", "first choice", "mozilla firefox"]]
+
+

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

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

+
+
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 +--- +

In progress. Archived add-ons documentation.

+ +

diff --git "a/files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_depuis_une_page_web/index.html" "b/files/fr/archive/add-ons/installation_d_extensions_et_de_th\303\250mes_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\303\250mes_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 +--- +

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="http://www.example.com/foo.xpi"
+   iconURL="http://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.)

+

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 +--- +
+

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.

+
+ +

Un paquetage multi extensions fournit la possibilité de conditionner plusieurs paquets installables 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 install.rdf et a les mêmes exigences et possibilités qu'une extension, à l'exception de ce qui suit :

+ +

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.

+ +

 

+ +

Structure d'un paquetage multi extensions

+ +

La structure d'un paquetage multi extensions est la forme simplifiée d'un paquet installable et requiert un fichier avec l'extension .xpi. Un paquetage multi extensions peut contenir aussi bien des extensions (fichiers .xpi) que des thèmes (fichiers .jar). La structure de base est indiquée ci-dessous:

+ +
/install.rdf                        Manifeste d'installation
+/extension1.xpi                     Extension
+/extension2.xpi                     Extension
+/theme1.jar                         Theme
+/theme2.jar                         Theme
+...
+
+ +

Le gestionnaire d'extension lira le manifeste d'installation 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 manifeste d'installation et les fichiers .jar ou .xpi, ne sera extrait ni utilisé.

+ +

install.rdf

+ +

Un paquetage multi extensions n'a pas les mêmes obligations qu'une extension pour son manifeste d'installation. Les seuls éléments requis sont em:id, em:targetApplication, et em:type.

+ +

Pour que les gestionnaires d'extensions de Firefox et Thunderbird 1.5 déterminent la nature du paquetage multi extensions, l'élément em:type spécifié dans votre install.rdf doit être à 32 et indiqué comme <em:type NC:parseType="Integer">32</em:type>. L'espace de nommage XML xmlns:NC="http://home.netscape.com/NC-rdf#" doit aussi être déclaré dans votre install.rdf comme indiqué ci-dessous:

+ +
...
+<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#">
+
+  <Description about="urn:mozilla:install-manifest">
+    <!-- nsIUpdateItem type for a Multiple Item Package -->
+    <em:type NC:parseType="Integer">32</em:type>
+...
+ +

Pour les gestionnaires d'extensions de Firefox et Thunderbird 2.0, vous pouvez utiliser la précédente syntaxe ou <em:type>32</em:type> comme indiqué ci-dessous:

+ +
...
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+
+  <Description about="urn:mozilla:install-manifest">
+    <!-- nsIUpdateItem type for a Multiple Item Package -->
+    <em:type>32</em:type>
+...
+ +

En spécifiant em:targetApplication, l'élément minVersion indiqué doit être l'élément minVersion le plus élevé et l'élément maxVersion indiqué doit être l'élément maxVersion le plus bas de tous les paquets installables par le paquetage multi extensions pour l'élément em:targetApplication. 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.

+ +

Installation

+ +

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.

+ +

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.

+ +

Références officielles de l'API du toolkit

+ +

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! +

+

diff --git "a/files/fr/archive/add-ons/t\303\251l\303\251charger_du_json_et_du_javascript_dans_une_extension/index.html" "b/files/fr/archive/add-ons/t\303\251l\303\251charger_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\303\251l\303\251charger_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 +--- +

Une pratique courante utilisée par de nombreuses extensions est d'utiliser XMLHttpRequest ou un mécanisme similaire pour charger du code JavaScript ou des données au format JSON depuis un site distant. Le contenu récupéré est ensuite interprété avec la fonction eval(). Cette pratique est dangereuse, 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 AMO

+

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.

+

Il existe heureusement un moyen de contourner ce problème.

+

Télécharger du JSON

+

Pour interpréter des données formatées en JSON, les développeurs ne devraient pas utiliser eval() mais plutôt une des méthodes indiquées sur cette page. 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 eval() !

+

Télécharger du JavaScript

+

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.

+

Pour exécuter ce code dans un environnement protégé, il faut faire appel au composant Components.utils.evalInSandbox(). 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é

+

diff --git "a/files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" "b/files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/index.html" new file mode 100644 index 0000000000..ab057e896c --- /dev/null +++ "b/files/fr/archive/add-ons/versions_extension,_mise_\303\240_jour_et_compatibilit\303\251/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' +--- +

Versions d'un module

+ +

Les modules doivent spécifier leurs versions en utilisant le Format de version du toolkit. Il s'agit approximativement d'une chaîne de caractères découpée par des points, comme par exemple :

+ + + +
Note : 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é.
+ +

Comment les applications déterminent la compatibilité

+ +

Lors de l'installation de modules, les applications regardent les entrées de targetApplication 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 minVersion et maxVersion de cette entrée doivent former un intervalle comprenant la version de l'application.

+ +

Si l'application possède une entrée targetApplication pour une version incompatible, elle tentera alors d'obtenir des informations de mise à jour à partir de l'updateURL du module.

+ +

Si le fichier install.rdf contient des entrées targetPlatform, la plateforme devant faire tourner l'application doit y être listée. Dans le cas contraire, l'installation sera refusée.

+ +

+

Note concernant Firefox 3

+

Dans des applications basées sur Gecko 1.9, vous pouvez également utiliser une entrée targetApplication avec une id toolkit@mozilla.org, et des valeurs minVersion et maxVersion 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.

+

+ +

Passer outre les tests de compatibilité

+ +

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 extensions.checkCompatibility avec la valeur false.

+ +
Note : Avant Firefox 1.5, la préférence app.extensions.version servait à outrepasser la version que l'application croyait pouvoir installer normalement.
+ +

Choix de minVersion et maxVersion

+ +

minVersion et maxVersion 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 maxVersion 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 mise à jour de compatibilité, il n'est pas nécessaire de fournir une version entière nouvelle de l'extension simplement pour augmenter son maxVersion.

+ +

Pour la valeur maxVersion, 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.

+ +

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 maxVersion. Si vous l'utilisez dans minVersion, vous n'obtiendrez pas le résultat escompté.

+ +

Vérification automatique des mises à jour de modules

+ +

Les applications vont vérifier périodiquement les mises à jour à installer des modules en récupérant le fichier updateURL. 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.

+ +

Mise à jour de compatibilité

+ +

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

+ +

Format RDF de mise à jour

+ +

Si vous hébergez l'updateURL 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 foobar@developer.mozilla.org. 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é.

+ +

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 :

+ + + +

Dans chacun des exemples qui vont suivre, la séquence des versions au sein de l'élément <RDF:Seq> 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.

+ +
<?xml version="1.0" encoding="UTF-8"?>
+
+<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+
+  <!-- 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. -->
+  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org">
+    <em:updates>
+      <RDF:Seq>
+
+        <!-- Chaque li est une version différente du même module -->
+        <RDF:li>
+          <RDF:Description>
+            <em:version>2.2</em:version> <!-- Ceci est le numéro de version du module -->
+
+            <!-- Un targetApplication pour chacune des applications avec laquelle le module est compatible -->
+            <em:targetApplication>
+              <RDF:Description>
+                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+                <em:minVersion>1.5</em:minVersion>
+                <em:maxVersion>2.0.0.*</em:maxVersion>
+
+                <!-- Ceci est l'emplacement de téléchargement du module -->
+                <em:updateLink>https://www.mysite.com/foobar2.2.xpi</em:updateLink>
+
+                <!-- Une page décrivant les nouveautés de la mise à jour -->
+                <em:updateInfoURL>http://www.mysite.com/updateinfo2.2.xhtml</em:updateInfoURL>
+              </RDF:Description>
+            </em:targetApplication>
+          </RDF:Description>
+        </RDF:li>
+
+        <RDF:li>
+          <RDF:Description>
+            <em:version>2.5</em:version>
+            <em:targetApplication>
+              <RDF:Description>
+                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+                <em:minVersion>1.5</em:minVersion>
+                <em:maxVersion>2.0.0.*</em:maxVersion>
+                <em:updateLink>http://www.mysite.com/foobar2.5.xpi</em:updateLink>
+                <em:updateHash>sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6</em:updateHash>
+              </RDF:Description>
+            </em:targetApplication>
+          </RDF:Description>
+        </RDF:li>
+
+      </RDF:Seq>
+    </em:updates>
+
+    <!-- Une signature est nécessaire seulement si votre module inclut un updateKey dans
+         son fichier install.rdf. -->
+    <em:signature>MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
+                  ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
+                  jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
+                  BcVq13ad</em:signature>
+  </RDF:Description>
+</RDF:RDF>
+
+ +

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é) :

+ +
<?xml version="1.0" encoding="UTF-8"?>
+
+<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+
+  <!-- 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. -->
+  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org">
+    <em:updates>
+      <RDF:Seq>
+        <!-- L'attribut resource pointe vers une entrée RDF:Description correspondante
+             plus bas. L'uri peut être ce que vous voulez -->
+        <RDF:li resource="urn:mozilla:extension:foobar@developer.mozilla.org:2.2"/>
+        <RDF:li resource="urn:mozilla:extension:foobar@developer.mozilla.org:2.5"/>
+      </RDF:Seq>
+    </em:updates>
+    <em:signature>MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
+                  ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
+                  jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
+                  BcVq13ad</em:signature>
+  </RDF:Description>
+
+  <!-- Ceci représente la même description qu'avec le li de l'exemple précédent -->
+  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org:2.2">
+    <em:version>2.2</em:version>
+
+    <!-- suppression du contenu ici -->
+
+  </RDF:Description>
+
+  <RDF:Description about="urn:mozilla:extension:foobar@developer.mozilla.org:2.5">
+    <em:version>2.5</em:version>
+
+    <!-- suppression du contenu ici -->
+
+  </RDF:Description>
+
+</RDF:RDF>
+
+ +

Fournir des détails sur les mises à jour

+ +

+ +

En général

+ +

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.

+ +

Pour réaliser cela, vous devez ajouter une entrée updateInfoURL à 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.

+ + + +

À l'intérieur des listes, utilisez les balises habituelles li pour chaque item.

+ +

À l'intérieur des balises h1, h2, h3, p et li, vous pouvez utiliser :

+ + + +

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 application/xhtml+xml.

+ +

Vous pouvez ajouter %APP_LOCALE% dans votre updateInfoURL 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 updateURL, bien qu'elles soient probablement moins utiles.

+ +

Ce que voit l'utilisateur

+ +

Le contenu de updateInfoURL 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 Afficher les informations et verra celles-ci sur le côté droit. (notez que l'intitulé du bouton devient Masquer les informations)

+ +

Image:Example_updateInfoURL2.png

+ +

Mises à jour sécurisées

+ +

+ +

Gecko 1.9 dispose d'un processus supplémentaire destiné à protéger les utilisateurs contre les attaques de l'homme du milieu ainsi que pendant des mises à jour de modules. Dans le fichier install.rdf du module déjà installé, updateURL doit être défini d'une des façons suivantes :

+ + + +

Lorsque vous spécifier une updateKey dans install.rdf, vous devez inclure une signature numérique dans le manifeste de mise à jour ou l'information sera rejetée.

+ +

Dans le manifeste de mise à jour délivré par updateURL, updateLink doit être défini d'une des façons suivantes :

+ + + +

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.

+ +

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 updateLink

+ +

Hachages de mise à jour

+ +

Afin de vérifier l'intégrité du XPI téléchargé, vous devez fournir une entrée updateHash 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 updateLink 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 « : ».

+ +
  <em:updateHash>sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6</em:updateHash>
+
+ +

Note : La valeur de updateHash, doit 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 updateHash : sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6

+ +

Une erreur est affichée lorsque le hachage d'un fichier téléchargé diffère de son hachage spécifié.

+ +

Différents outils peuvent être utilisés pour générer des hachages :

+ +

De nombreuses variantes d'Unix fournissent sha1sum, sha256sum et ainsi de suite. Les utilisateurs de Windows peuvent utiliser HashTab pour une utilisation interactive (hors script de compilation). On pensera aussi aux outils GNU pour Windows (en dehors des classiques comme Cygwin), qui peuvent servir en utilisation non interactive :

+ +
sha1sum FICHIER
+
+ +

On peut encore citer md5deep, qui est multiplateforme :

+ +
sha1deep FICHIER
+
+ +

OpenSSL peut également générer des hachages :

+ +
openssl sha1 FICHIER
+
+ +

Sous Windows, HashTab peut servir d'extension au shell… un clic droit vous donnera des valeurs de hachage pour n'importe quel fichier.

+ +

De plus, un bug d'amélioration est ouvert pour ajouter une génération automatique de hachages pour les fichiers XPI à l'outil McCoy.

+ +

Enfin, tous les langages (de script) populaires offrent cette fonctionnalité, par exemple : Python, Perl: CPAN Digest, PHP.

+ +

Signature de manifestes de mise à jour

+ +

+ +

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 McCoy doit être utilisé pour signer le RDF de mise à jour.

+ +

Les détails techniques du mécanisme de signature dépasse le cadre de ce document, toutefois les bases sont les suivantes :

+ +
Première étape — à faire une seule fois, avant de publier le module
+ +

L'objectif et d'ajouter updateKey au fichier install.rdf.

+ +

L'auteur du module crée une paire de clés cryptée RSA publique/privée.

+ +

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

+ +
Deuxième étape — à faire à chaque modification du fichier « update.rdf »
+ +

L'objectif est de définir la valeur de signature dans update.rdf.

+ +

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

+ +

Débogage et résolution de problèmes

+ +

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 :

+ +
    +
  1. Définissez la valeur de extensions.logging.enabled à true (en utilisant l'URL about:config).
  2. +
  3. Lancez Firefox en ligne de commande avec l'option -console
  4. +
+ +

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.

-- cgit v1.2.3-54-g00ecf