Cette traduction est incomplète. Aidez à traduire cet article depuis l'anglais.

XUL Tips

  • Lorsque vous insérez du code dans un overlay XUL, placez vos fonctions et variables à l'intérieur d'un objet possédant un nom unique afin d'éviter des conflts avec d'autres fonctions et noms de variables existants ou futurs.
var UniqueName = {
  _privateMember: 3,
  publicMember: "A string",

  init: function() {
    this.doSomething(this.anotherMember);
  },

  doSomething: function(aParam) {
    alert(aParam);
  }
};

XPConnect

  • N'utilisez pas plus de méthodes ou de propriétés d'object qu'il vous faut. Il est plus souvent rapide de stocker le résultat dans une variable temporaire.
  • N'appelez pas les méthodes dont vous n'avez pas besoin. Par exemple, windowManager.getEnumerator(aType).hasMoreElements() peut être remplacé par windowManager.getMostRecentWindow(aType) != null pour une simple fenêtre.
  • N'interrogez des interfaces que pour avoir accès aux méthodes et propriétés de cette interface. Vous n'avez pas à interroger des interfaces pou comparer des objets, pas plus que pour passer des objets en tant que paramètres (Ceci est différent du C++, où vous devez interroger les interfaces dans ces 2 cas).
  • N'appelez pas QueryInterface à moins que vous en ayez réellement besoin. A la place, utilisez plutôt instanceof, par exemple :
if (target instanceof Components.interfaces.nsIRDFResource)
  return target.Value;
if (target instanceof Components.interfaces.nsIRDFLiteral)
  return target.Value;
return null;
  • Ne testez pas la valeur de retour de QueryInterface, elle renvoie toujours la valeur originale en cas de succès. XPConnect knows all about tearoffs and modifies the object that you QueryInterface or instanceof to cache all its known interfaces.
  • Lorsque vous passez un objet à une méthode XPCOM, passez plutôt un objet XPCOM. La méthode C++ accèdera alors directement à l'objet C++. Ce n'est cependant pas toujours nécessaire. For instance the offline observer declared above is a JavaScript object that is registered with an XPCOM object, so that the call back from XPCOM executes the JavaScript method. Some XPCOM methods expect an object that implements several interfaces thus requiring you to write a QueryInterface method. However, in JavaScript this is quite simple even in the case of a weak reference which in C++ requires a helper class:
var weakObserver = {
  QueryInterface: function QueryInterface(aIID) {
    if (aIID.equals(Components.interfaces.nsIObserver) ||
        aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
        aIID.equals(Components.interfaces.nsISupports))
       return this;
    throw Components.results.NS_NOINTERFACE;
  },
  observe: function observe(aSubject, aTopic, aState) {
  }
}
  • Lorsque vous devez déclarer des méthodes XPCOM, essayez d'utiliser les mêmes noms pour les paramètres de la méthodes que dans la définition de l'interface.

DOM elements

  • Les éléments du DOM sont juste des objets XPCOM dont certaines interfaces sont mises en cache.
  • N'appelez pas getAttribute pour voir si des attributs existent, appelez plutôt hasAttribute instead.
  • Utilisez une boucle sur les childNodes plutôt que d'utiliser first/lastChild avec next/previous. Mais utilisez plutôt hasChildNodes() to childNodes.length > 0. De même utilisez   document.getElementsByTagName(aTag).item(0) != null plutôt que document.getElementsByTagName(aTag).length > 0.
  • Utilisez de préférence localName plutôt que tagName.
  • Les éléments XUL elements ont beaucoup d'attributs mappés aux propriétés. Ceci a été fait pour que vous les utilisiez ! Les propriétés sont les suivantes :
    • align
    • allowEvents
    • contextMenu
    • datasources
    • dir
    • flex
    • height
    • id  
    • left
    • maxHeight
    • maxWidth
    • minHeight
    • minWidth
    • observes
    • orient
    • pack
    • persist
    • ref
    • statusText
    • top
    • tooltip
    • tooltipText
    • width
  • XUL mappe l'attribut ordinal, mais s'il n'est pas présent il sera initialisé à "1".
  • XUL mappe également l'attribut class attribute, mais malheureusement class est un identifiant réservé. La propriété est donc appelée className. (La propriété pourrait avoir été implémentée ainsi ["class"] mais ca paraît un peu idiot.)
  • XUL mappe les attributs hidden et collapsed aux propriétés, mais n'oubliez pas qu'il s'agit de propriétés booléennes tandis que la liste ci-dessus sont toutes des propriétés de type string..
  • XUL mappe également d'autres propriétés et méthodes très utiles via le binding XBL. Ceci varie d'un élément à un autre.
  • Pour de meilleures performances donnez des ids à tous les éléments importants. En plus de localiser des éléments par tagName, XUL vous permet de localiser un élément par son attribut en commençant de n'importe quel élément dans le document.

References

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : flyusfly
 Dernière mise à jour par : flyusfly,