Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Exemples XPCOM

 

Cette section donne quelques exemples d'utilisation de la technologie XPCOM avec de nouvelles interfaces.

Gestion de Fenêtres

Cet exemple contient une source de données RDF qui sera décrite dans une prochaine section. Vous devriez passer cet exemple pour l'instant, à moins d'en savoir suffisamment sur le sujet.

Création d'un menu de fenêtre

La liste des fenêtres Mozilla ouvertes peut être utilisée comme une source de données RDF. Elle vous permet de créer dans votre application un menu donnant la liste des fenêtres courantes ouvertes. La source de données correspondante est 'rdf:window-mediator' dont voici un exemple d'utilisation :

Exemple 1 : Source

<toolbox>
 <menubar id="windowlist-menubar">
  <menu label="Fenêtres">
   <menupopup id="window-menu" datasources="rdf:window-mediator" ref="NC:WindowMediatorRoot">
    <template>
     <rule>
      <menuitem uri="rdf:*" label="rdf:https://home.netscape.com/NC-rdf#Name"/>
     </rule>
    </template>
   </menupopup>
  </menu>          
 </menubar>
</toolbox>

Un menu contenant la liste de toutes les fenêtres ouvertes sera créé. Essayez cet exemple en ouvrant plusieurs fenêtres, et vous les verrez toutes dans le menu.

Composant mediator

Cet exemple peut être amélioré de telle façon que lorsque l'on clique sur un élément du menu, la fenêtre correspondante soit affichée. Cette tâche sera rendue possible grâce au composant "window mediator" qui implémente l'interface nsIWindowDataSource. Le code suivant montre comment il fonctionne :

var wmdata = Components.classes["@mozilla.org/rdf/datasource;1?name=window-mediator"].getService();
wmdata.QueryInterface(Components.interfaces.nsIWindowDataSource);

Ce code récupère le composant "window mediator". Le composant utilisé ici est le même que celui qui gère la source de données RDF "Window-mediator". Vous pouvez également récupérer ce composant au travers du service RDF qui est un autre service de gestion des sources de données RDF.

L'interface nsIWindowDataSource possède une fonction getWindowForResource qui nous donne une fenêtre à partir d'une ressource. Dans un exemple précédent, nous avons généré une liste de fenêtres que nous avons ajoutée à un menu via une balise template. Celle-ci génère un attribut id pour chaque élément menuitem. La valeur de cet attribut peut être utilisée comme ressource. Ainsi pour donner le focus à la fenêtre sélectionnée, nous pouvons procéder de la manière suivante :

  1. Déterminer l'élément que l'utilisateur a sélectionné.
  2. Récupérer la valeur de l'attribut id de cet élément.
  3. Passer cette valeur à getWindowForResource() pour avoir l'objet "window".
  4. Mettre le focus sur celle-ci.

L'exemple ci-dessous nous montre comment procéder :

<toolbox>
 <menubar id="windowlist-menubar">
  <menu label="Fenêtre" oncommand="switchFocus(event.target);">
   <menupopup id="window-menu" datasources="rdf:window-mediator" ref="NC:WindowMediatorRoot">
    <template>
     <rule>
      <menuitem uri="rdf:*" label="rdf:https://home.netscape.com/NC-rdf#Name"/>
     </rule>
    </template>
   </menupopup>
  </menu>          
 </menubar>
</toolbox>

<script>
function switchFocus(elem)
{
  var mediator = Components.classes["@mozilla.org/rdf/datasource;1?name=window-mediator"].getService();
  mediator.QueryInterface(Components.interfaces.nsIWindowDataSource);

  var resource = elem.getAttribute('id');
  switchwindow = mediator.getWindowForResource(resource);

  if (switchwindow){
    switchwindow.focus();
  }
}
</script>

Un gestionnaire de commande a été ajouté à l'élément menu. Ce gestionnaire appelle la fonction switchFocus() avec comme paramètre l'élément du menu que nous avons sélectionné. La fonction switchFocus() :

  • récupère d'abord une référence du composant qui implémente l'interface du "window mediator" (NdT : plus exactement nsIWindowDataSource ).
  • Puis nous récupérons l'attribut id de l'élément. Nous utilisons cette valeur comme ressource.
  • La ressource est passée en paramètre à la fonction getWindowForResource() qui renvoie la fenêtre correspondante. Cette fenêtre est stockée dans la variable switchwindow comme objet javascript window.
  • Par conséquent, toutes les fonctions de cet objet sont utilisables, comme la fonction focus().

Cookies

Maintenant, nous allons récupérer la liste des cookies sauvegardés par le navigateur. Nous allons utiliser le service "Cookie" qui implémente l'interface nsICookieManager utilisée pour énumérer tous les cookies. Voici un exemple qui alimente la liste d'un menu avec le nom de tous les cookies provenant du site MozillaZine.

<script>

function getCookies()
{
  var menu = document.getElementById("cookieMenu");
  menu.removeAllItems();

  var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"]
                        .getService(Components.interfaces.nsICookieManager);

  var iter = cookieManager.enumerator;
  while (iter.hasMoreElements()){
    var cookie = iter.getNext();
    if (cookie instanceof Components.interfaces.nsICookie){
      if (cookie.host == "www.mozillazine.org")
        menu.appendItem(cookie.name,cookie.value);
    }
  }
}
</script>

<hbox>
  <menulist id="cookieMenu" onpopupshowing="getCookies();"/>
</hbox>

La fonction getCookies() sera appelée à chaque ouverture du menu, comme indiqué par l'attribut onpopupshowing de l'élément menulist. Les deux premières lignes de getCookies() récupèrent l'élément menulist et suppriment tous les items existants. En effet comme cette fonction est appelée à chaque fois que nous l'ouvrons, nous ne voulons pas garder les anciens éléments.

Ensuite, le gestionnaire de cookie est récupéré. Celui-ci a une méthode qui renvoie un objet énumérateur implémentant nsISimpleEnumerator. Il nous permet de parcourir tous les cookies. Un énumérateur dispose d'une méthode hasMoreElements() retournant 'true' jusqu'à ce que le dernier cookie soit récupéré. La méthode getNext() renvoie un cookie et incrémente l'index de l'énumérateur. Comme l'énumérateur ne renvoie qu'un objet générique, nous devons lui indiquer que nous voulons utiliser l'interface nsICookie. Dans ce cas, l'opérateur instanceof permet d'accomplir cette vérification.

Finalement, un élément est ajouté au menu pour chaque cookie ( NdT : dont le site hôte est "www.mozillazine.org"). Les propriétés hôte, nom et valeur du cookie sont alors utilisées. Les menus ont une fonction appendItem() qui ajoute un élément avec un libellé et une valeur.

Voir aussi

D'autres exemples sont disponibles ici :


Dans la section suivante, nous allons voir comment utiliser le presse papier.

Interwiki

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : jigs12, teoli, E.cg, Chbok
 Dernière mise à jour par : jigs12,