TUTORIEL CLIENTS WEB 
Les fonctions de l'extension Firefox GreaseMonkey
Exploration du fonctionnement de l'extension autorisant, par des scripts, à modifier la page en cours de visite. Et tour d'horizon des différentes méthodes disponibles. (12/12/2005)
Après avoir présenté l'extension Firefox GreaseMonkey et ses possibilités (lire notre article du 25/05/05), vient le moment d'aborder ses fonctions. Nous avions déjà vu comment, en quelques lignes, retirer d'une page un élément ayant un certain identifiant (dans notre exemple passé, "pubflash"). GreaseMonkey permet d'aller beaucoup plus loin : il autorise l'ajout de fonctionnalités, le correction de bugs d'affichage ou encore la combinaison de données en provenance de plusieurs sites.

Notez que la plupart des userscripts (scripts d'utilisateurs) sont utilisables avec Opera, et qu'un port existe pour Internet Explorer.

Note de sécurité : si vous utilisez toujours la version 0.3 de GreaseMonkey, soyez averti qu'elle contient des failles de sécurité majeures. Nous vous recommandons expressément de mettre à jour vers (au moins) la version 0.5, qui a été entièrement réécrite pour sécuriser l'extension. La dernière version actuelle est la v0.6.4, compatible avec Firefox 1.5.

Les scripts GreaseMonkey sont exécutés au sein d'un environnement sécurisé (de type "bac à sable", les scripts étant fortement surveillés), mais cela ne leur empêche par de faire appel à quasiment toutes les fonctionnalités habituellement accessibles aux JavaScript classiques. Le DOM propose ainsi nombre de méthodes, propriétés et gestionnaires d'évènements : innerHTML, addEventListener, replaceChild, nextSibling, parentNode... Elles sont à découvrir dans la référence DOM de Firefox.

Les scripts sont exécutés dès que le DOM est prêt à charger, et avant même que l'évènement onLoad de JavaScript ne soit lancé. Cela permet au script d'agir avant même que la page ne s'affiche. Cette rapidité d'exécution combinée aux possibilités du DOM autorisent les scripts à complètement revoir le fonctionnement d'un site, de manière transparente pour l'utilisateur.

En outre, GreaseMonkey définit une API de fonctions spécifiquement accessibles aux userscripts, et inutilisables par les JavaScript normaux. Les fonctions de cette API offrent aux userscripts un accès vers des propriétés ouvertes uniquement aux JavaScript "privilégiés" (privileged) - les Javascript classiques étant unprivileged...

Fonctions de l'API interne GreaseMonkey
Fonctions
Utilité
GM_log()
Ecrit un message dans la console JavaScript. Sert surtout à déboguer un script.
GM_setValue()
Enregistre une valeur (spécifique au script) dans les préférences de Firefox.
GM_getValue()
Récupère une valeur enregistrée avec GM_setValue.
GM_registerMenuCommand()
Ajoute une ligne personnalisée au sous-menu User Scripts Command, dans le menu Outils de Firefox.
GM_xmlhttpRequest()
Lance une requête HTTP (en GET ou POST) vers n'importe quelle URL.
GM_openInTab()
Ouvre simplement l'URL spécifiée dans un nouvel onglet.
GM_addStyle()
Ajoute une chaîne aux styles CSS du document en cours.
Source : Benchmark Group, 2005

La plupart des fonctionnalités sont assez explicites. Certaines méritent qu'on s'y attarde.

Par exemple, GM_setValue et GM_getValue autorisent la création de véritables configurations/préférences pour le script lui-même, stockées au sein de Firefox et réutilisables à utilisation de l'userscript - en quelque sorte, des cookies pour scripts, mais liés au script, et non à un site.

  Forum

Réagissez dans les forums de JDN Développeurs

GM_xmlhttpRequest est probablement la fonctionnalité la plus puissante du lot. Là où l'objet XMLHttpRequest original limite les requêtes GET et POST au site en cours, GM_xmlhttpRequest laisse le script récupérer des données en provenance de n'importe quel site - et même plusieurs si besoin est. C'est grâce à cela qu'un script comme BookBurro existe : sur page de livre Amazon.com, il affiche les prix pour le même livre chez d'autres revendeurs Internet...

Notez que toutes les versions de GreaseMonkey ne disposent pas des mêmes fonctions de l'API. Il est alors de bon ton de tester l'existence d'une fonction avant de l'utiliser. En cas d'absence, il faudrait faire en sorte de fournir un fonctionnement alternatif... ou avertir l'utilisateur :

if (!GM_xmlhttpRequest) {
  alert('Ce script ne fonctionnera qu\'avec la dernière version de GreaseMonkey !');
  return;
  }
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages