Comment récupérer et modifier les préférences de Mozilla ?

Écrit par Neil Deakin. Traduit par Alain B. (15/07/2005).
Page originale : http://www.xulplanet.com/tutorials/xulqa/q_prefs.html xulplanet.com

Mozilla et les applications basées sur Mozilla chargent les préférences de l'utilisateur à partir de plusieurs sources. Chaque source est un fichier JavaScript qui contient quelques fonctions spéciales non accessibles à un code JavaScript normal. Ces fonctions sont utilisées pour assigner des préférences dans le système de gestion des préférences de Mozilla. Les nouvelles versions de Mozilla (après la version 1.4) utilisent un interpréteur plus simple pour les lire, mais les anciennes versions utilisaient l'interpréteur JavaScript. Ainsi, les anciennes versions pouvaient contenir du code JavaScript arbitraire en plus du code pour les préférences, mais seules les classes du noyau étaient utilisables. Les fonctions DOM et XPCOM ne pouvaient pas être utilisées.

Les préférences suivantes sont utilisées :

Préférences par défaut
Elles sont stockées dans le répertoire defaults/pref du répertoire d'installation de Mozilla.
Préférences courantes
Elles sont stockées dans le répertoire profil avec le nom prefs.js. Il s'agit de l'emplacement où les paramètres utilisateur sont stockés. Ce fichier est réécrit lorsque les préférences sont modifiées.
Préférences utilisateur
Le fichier user.js dans le répertoire profil contient des préférences supplémentaires que l'utilisateur a ajouté. Ce fichier n'est jamais réécrit par Mozilla, mais l'utilisateur peut vouloir définir des préférences manuellement dans ce fichier en remplacement d'autres.
Fichier de paramètres bloqués
Ces préférences sont stockées dans un fichier habituellement nommé mozilla.cfg ou netscape.cfg. Ce fichier peut être localisé sur un réseau. Il est censé être utilisé par un administrateur ou un FAI pour centraliser le paramétrage. De plus, certaines préférences peuvent être vérouillées de telle sorte que l'utilisateur ne puisse pas les modifier. Les préférences vérouillées seront désactivées dans la boîte de dialogue des préférences de Mozilla.

Les préférences elles mêmes sont identifiées par un nom constitué par un nombre de mots séparés par des point. Par exemples, browser.startup.homepage est utilisé pour définir la page d'accueil. Le nom de la préférence ou de chaque partie du nom n'a aucune signification. Mozilla ne traite pas les préférences qui commencent par 'browser' d'une manière particulière, toutefois il est fortement recommandé que toutes les préférences soient groupées comme ceci pour éliminer les conflits. Lorsque vous créez votre propre préférence, utilisez le nom de votre application comme mot initial.

Vous pouvez visualiser les préférences actuelles organisées par nom en tapant about:config dans la barre d'adresses du navigateur.

La valeur des préférences sont de trois types : booléens, entiers ou chaînes. Utilisez le type JavaScript correspondant pour assigner des préférences de chaque type. Il existe également un type complexe pour la représentation des objets, mais vous ne l'utiliserez que rarement, voir jamais.

Le système de préférences dans Mozilla est compatible avec celui utilisé par Netscape Communicator 4.x. L'ancienne fonction navigator.preference utilisée pour récupérer et modifier les préférences est encore supportée mais il est recommandé que vous utilisiez l'interface XPCOM à la place. Les interfaces XPCOM décrites ci-dessous et dans la référence XPCOM sont figées et ne changeront pas.

L'interface des préférences vous permet d'obtenir les préférences en utilisant des 'branches'. Par exemple, si vous sollicitez la branche browser, vous pourrez l'utiliser pour récupérer toutes les préférences commençant par 'browser'. Pour toutes les requêtes sur cette branche, vous pouvez omettre le préfixe pour plus de simplicité. Ceci sera très utile pour faire référence aux préférences de votre application avec le préfixe xulsample. Créez un objet branche, enregistrez le globalement et faites y référence en utilisant la branche sans avoir à spécifier le préfixe xulsample à chaque fois.

Toutefois, vous pouvez également utiliser le système de préférences sans l'emploi des branches. Dans ce cas, vous devrez spécifier la totalité du chemin pour chaque préférence à chaque fois. Vous pouvez récupérer et modifier les préférences en utilisant l'interface nsIPrefBranch qui implémente chaque branche, en incluant le niveau supérieur étant réellement une branche contenant toutes les préférences.

Pour utiliser le système de préférences, vous devez d'abord obtenir une référence du service de préférences. Comme il s'agit d'un service, vous devez utiliser la méthode getService. N'utilisez pas createInstance ou les choses ne fonctionneront pas. Le service de préférences implémente les deux interfaces nsIPrefService et nsIPrefBranch.


  var prefs = Components.classes["@mozilla.org/preferences-service;1"].
                getService(Components.interfaces.nsIPrefBranch);

Cet exemple créera une branche de préférence à partir du niveau supérieur que vous pourrez employer pour récupérer n'importe quelle préférence. Pour obtenir le type d'une préférence donnée, utilisez la fonction getPrefType. Dès que vous connaissez le type, vous pouvez utiliser des fonctions pour obtenir la valeur de la préférence comme valeur de ce type. L'exemple suivant récupérera l'adresse de la page d'accueil :


  var homepage;
  if (prefs.getPrefType("browser.startup.homepage") == prefs.PREF_STRING){
    homepage = prefs.getCharPref("browser.startup.homepage");
  }

Dans ce cas, vous pouvez probablement éviter de tester le type car la page d'accueil est présumée être toujours une chaîne de caractères. En plus de getCharPref qui retourne des préférences sous forme de chaîne de caractères, vous avez également getIntPref et getBoolPref qui retournent respectivement des préférences sous forme d'entiers et de booléens.

Vous pouvez utiliser diverses fonctions commençant par 'set' pour modifier les préférences. Par exemple, le code suivant désactivera javascript (les applications chrome ne seront pas affectées) :


  prefs.setBoolPref("javascript.enabled",false);

Voici ici un exemple complet qui affichera la préférence ouvrir les onglets en arrière plan :


  var prefs = Components.classes["@mozilla.org/preferences-service;1"].
                getService(Components.interfaces.nsIPrefBranch);

  var tabsMode;
  if (prefs.getPrefType("browser.tabs.loadInBackground") == prefs.PREF_BOOL){
    tabsMode = prefs.getBoolPref("browser.tabs.loadInBackground");
  }
  alert(tabsMode);

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.