![]() |
![]() |
Accueil > Intranet Michel Buffa > Web 2.0 2010 > Seance 5 et 6 : Developpement d'application XUL > TP6: étude d'une extension Firefox
TP6: étude d'une extension FirefoxDe $1Table des matièresEtude de la structure de base d'une extensionNOTE: si vous avez des soucis pour faire marcher la version du WebServ, voici une version alternative (projet eclipse WebServTP3_alternatif InstallationConstituez-vous un environnement de développement en vous créant un profil firefox spécifique (cf TP 5). Télécharger et décompresser l'extension de test feakeext Pour tester cette extension, copier le fichier nommé "fakeext @ isicil.inria.fr" qui se trouve dans l'archive, dans le dossier "extensions" de votre profil firefox de développement. Le nom de ce fichier correspond à l'identifiant de l'extension déclaré dans le fichier install.rdf: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<RDF:Description about="urn:mozilla:install-manifest">
<em:aboutURL>chrome://fakeext/content/dialogs/about.xul</em:aboutURL>
<em:creator>INRIA Sophia</em:creator>
<em:description/>
<em:homepageURL>http://isicil.inria.fr</em:homepageURL>
<em:iconURL>chrome://fakeext/skin/logo/isicil.png</em:iconURL>
<em:id>fakeext@isicil.inria.fr</em:id>
<em:name>ISICIL Fake Extension</em:name>
<em:version>0.1.0</em:version>
<em:updateURL>https://isicil.inria.fr/updates</em:updateURL>
<em:type>2</em:type>
<em:targetApplication>
<RDF:Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:maxVersion>3.*.*</em:maxVersion>
<em:minVersion>3.0</em:minVersion>
</RDF:Description>
</em:targetApplication>
</RDF:Description>
</RDF>
Ouvrez ensuite ce fichier qui contient une seule ligne indiquant le chemin du dossier "src" de l'extension. Modifiez ce chemin pour pointer vers le bon dossier (par ex dans mon cas "D:\flimpens\web-pgm\workspace_cours\fakeext\src"). Redémarrez Firefox et allez voir le menu Outils/Modules complémentaires et vérifiez que l'extension ISICIL Fake Extension a bien été installée, elle doit apparaitre sous la forme d'une entrée dans le menu. Etude de la structureLa structure de l'extension est la suivante:
Obeservez tout d'abord le contenu du fichier install.rdf (cf ci-dessus) qui contient tous les détails liés à l'identification de l'extension. Regardez maintenant le fichier chrome.manifest:
C'est dans ce fichier que sont déclarées les correspondances entre les adresses chrome:// et les dossiers de l'arborescences. Par exemple le fichier image isicil.png sera accessible à l'adresse : Regardez maintenant le fichier overlay.xul:
La ligne 2 donne l'adresse du fichier où sont déclarées les entités qui sont des variables accessibles avec la syntaxe NOTE POUR LES EXERCICES : vous devez avoir installé les extensions firefox recommandées lors du TP précédent :
Lorsque vous modifierez un des fichiers de votre extension, au lieu de relancer à chaque fois firefox, utilisez l'option "reload all xul module" de l'extension Developper. Vous pouvez aussi faire apparaitre la barre d'outil de cette extension, ce qui donne un accès immédiat à cette fonctionnalité (dans le menu affichage/Barres d'outils) Exercice: Ajouter une interaction ouvrant la fenêtre de dialogue:
Exercice: Ajoutez un bouton à la fenêtre de dialogue qui ouvre une page dans un nouvel onglet du navigateur.
Etude d'une extension complèteL'extension "boomtag" est un prototype d'extension un peu plus complète et faisant appel à des web services développés dans le cadre du premier cours sur les web services REST. Déploiement et test de l'extensionTéléchargez et décompressez l'archive boomtag. Cette extension consomme des web services du serveur de bookmarks étudiés dans le séance 1. Une version adaptée pour la création de bookmark et basée sur la version correspondante au TP 3 est disponible ici (la librairie dojo a été supprimée pour un gain de place, si vous souhaitez utilisez ces librairies vous pourrez les récupérez depuis l'archive du TP3 -- si vous aves des soucis avec cette version pour faire marcher le DOJO, voici ici une version alternative WebServTP3_alternatif). Récupérez l'archive et vérifiez que le server fonctionne bien. Le web service qui est appelé à l'ouverture de l'extension est le suivant: http://localhost:9998/bookmark/all. Pour l'installation et le test, procédez comme pour fakeext :
Cette extension se compose d'une sidebar (sur la gauche) qui est ouverte par défaut au lancement et qui liste les bookmarks donnés par l'appel au web service. Le serveur de tags doit bien sûr avoir été lancé sur votre machine !!!! Vérifiez que tous les bookmarks sont bien listés d'abord en accédant depuis votre navigateur à cette adresse : http://localhost:9998/bookmark/all. Ensuite seulement, votre extension pourra les visualiser dans la side-bar. Cette extension permet aussi d'enregistrer des bookmarks. Pour l'utiliser faites ALT+SHIFT+D. Une fenetre apparait contenant 3 champs dont certains sont déjà complétés. Le web service pour l'enregistrement des bookmarks nécessite d'être identifié au préalable via le formulaire à l'adresse http://localhost:9998/. L'objectif maintenant est d'enrichir ce squelette d'extension avec des fonctionnalités de tagging, mais aussi (selon votre inspiration) avec des fonctions gérant l'identification, la recherche des bookmarks par tags, etc. Etude des spécificités de boomtagNous allons maintenant regarder plus en détail le code source de cette extension. overlay.xulRegardez l'entête de ce fichier:
Observez ligne 4 la déclaration du fichier d'overlay bmtree.xul où sera écrit le code XUL de la sidebar qui s'intègre directement dans le navigateur, par contraste avec les autre fenêtres de dialogue. Voyez aussi l'externalisation des scripts ligne 6. Autre nouveauté la possibilité d'ajouter des menus contextuels grace à l'élément popup:
L'id de l'élément dans lequel s'insère ce code XUL (contentAreaContextMenu) est un attribut du tabbrowser "content", un élément fils du browser. Utilisez le Dom Inspector pour retrouver ces éléments du DOM du navigateur. Les commandset permettent de déclarer des commandes qui sont ensuite reliés à des appels de fonction javascript contenu dans le fichier inclu en entête. Regardez la commande "showPanel":
Ces commandes peuvent être ensuite appelés par d'autres éléments XUL comme les raccourcis claviers, les "keyset". Ici CTRL+SHIFT+F pour appeler la commande showPanel (ainsi que l'autre raccourci évoqué plus haut pour l'éditeur de bookmarks):
Ces éléments sont insérés dans un élément "window" main-window. Utilisez le DOM inspector à l'adresse suivante pour vous répérer : chrome://browser/content/browser.xul Enfin la sidebar est insérée dans l'élément "browser" (id) de type "hbox":
L1-2 : répérer les éléments du DOM concernés par les insertions (id="browser" et insertbefore="sidebar-box").Vient ensuite l'entête de la sidebar "sidebarheader" (l3-7): n'hésitez pas à avoir recours aux références sur le site XUL pour mieux comprendre les différents attributs des éléments. Voyez l'emploi d'un commandset pour fermer la sidebar (cmd_closePanel). L8-11 : insertion de la barre de recherche qui pour l'instant n'a pas de fonctions associées. A la ligne 12 est déclarée le conteneur de la liste des bookmarks affichés id="bmtree-container". Cette ID correspond à ce qui est décrit dans le fichier bmtree.xul (dans content\overlays\bmtree) que nous allons maintenant étudier. bmtree.xul : les templates XMLRemarquez dans l'entête la ligne:
qui permet d'associer ce code source à un overlay déclaré dans le fichier overlay.xul. Autre détail important, ligne 6: <vbox id="bmtree-container" flex="1" class="panel-frame"> Attention de bien respecter l'id déclarée dans le fichier overlay.xul (id=bmtree-container). Template XML:Assurez vous d'avoir bien compris les template XML vu au TP précédents. Le principe est ici le même, mais appliqué sur un élément de type "tree" (cf ref):
Les attributs spécifiques au mécanisme de template sont le "datasource" qui fait appel ici à une entitée déclarée dans locale.dtd, "ref", et "querytype". Notez aussi l'interaction dynamique lors d'un doubleclick. Regardez le code correspondant dans le fichier bmtree.js et la méthode loadData. Les propriétés et méthodes spécifiques à l'élément tree sont décrit dans la ref, notamment tree.view.getCellText, etc. Vous retrouverez aussi la fonction loadOneTab associé à l'élément gBrowser qui est ici accesible directement sans passer par window.opener.gBrowser. Le principe de requête et de "remplissage" du tableau est le même qu'au TP précédent avec la requête XPath "coupée" en 2. Chargez d'abord dans un onglet à part le résultat de requête correspondant au datasource déclaré (http://localhost:9998/bookmark/all) afin de mieux comprende la requête XPath.
On récupére tous les éléments "bookmark" et pour chacun de ces éléments, on "mappe" le noeud id (expr="id") avec la variable ?id (var="?id"), et ainsi de suite pour les autre noeuds. Ces variables sont ensuites réutilisées pour peupler le "tree" dans la partie "action" du template (ignorez la balise "rule" pour l'instant):
Notez aussi l'attribut uri="?" dans la balise "treeitem" qui permet de "raccrocher" le résultat des requêtes. Chaque variable peut ensuite être utilisée comme valeur d'attribut, ici l'attribut "label" de chaque "treecell". L'éditeur de bookmarks: bmeditor.xulL'élement XUL est ici de type "dialog" :
Cette fenêtre est appelée par la combinaison ALT+SHIFT+D depuis un onglet du navigateur. La méthode bmeditor.init() déclarée dans le fichier bmeditor.js permet de récupérer des éléments de la page HTML chargé dans l'onglet:
Attention à la correspondance des ids des éléments XUL utilisées pour peupler les élements (seuls les tags ne sont pas peuplés) (Notez aussi qu'ici encore, il faut passer par window.opener afin d'accéder au "gBrowser" depuis une fenêtre de dialogue) :
Lorsque l'utilisateur clique sur le bouton OK, la fonction save est appelée depuis bmeditor.js
Cette fonction effectue un appel AJAX vers le serveur de bookmark bmserv.
Observez maintenant la manière dont l'appel est traité côté serveur dans la classe BookmarkResource.java:
Notez aussi comment est gérée l'identification de l'utilisateur, car celui-ci doit être logué pour pouvoir enregistrer un bookmark. Dans le script boomtag.js :
La fonction showBMEditor vérifie que l'utilisateur est bien logué en faisant un appel AJAX au web service
A vous de jouer !Vous pouvez maintenant enrichir cette extension :
Mots clés:
|
Powered by MindTouch Deki Open Source Edition v.8.08 |