Le Blog de Thomas

Logiciels libres, Linux embarqué, et autres ...

Formation Linux embarqué à Toulouse

Hack de DOM avec GreaseMonkey


Aujourd'hui, j'avais besoin d'éditer des pages dans un Wordpress. L'interface d'administration de la chose est plutôt agréable, mais un point me chagrinait : le formulaire servant à rédiger le contenu de la page est ridiculement petit (on doit voir 7-10 lignes maximum). Vraiment pas pratique pour rédiger une page un peu longue, on souhaite en général avoir un peu plus de contexte autour de ce que l'on est en train d'écrire.

Je fouille les options de Wordpress, je ne trouve rien. Je cherche un peu sur le Web, je ne trouve rien non plus de vraiment probant, ou alors il faut aller hacker le code de Wordpress à la main, ce qui n'était pas possible dans mon cas.

Du coup, je dégaine Firebug, je lui dis d'inspecter l'élément textarea qui sert de zone d'édition, et j'ajoute height: 300px dans les propriétés CSS de la chose. Et ça marche. Génial! Sauf qu'évidemment, dès que je recharge la page, cette bidouille disparaît, et il faut recommencer à zéro.

Je me souviens avoir lu plusieurs journaux sur LinuxFr.org (comme quoi mouler sur LinuxFr.org peut parfois s'avérer utile) qui parlaient d'un plug-in pour Firefox permettant d'écrire des scripts pour modifier à la volée des pages HTML. Après quelques recherches, je retrouve enfin le nom de ce fameux plugin: GreaseMonkey.

La documentation n'est pas particulièrement claire, en particulier pour débuter. Mais je suis tombé sur un exemple Hello World simple qui a permis de démarrer. En gros, c'est tout simple :
// ==UserScript==
// @name          Hello World
// @namespace     http://diveintogreasemonkey.org/download/
// @description   alert "Hello world!" on mypage.com
// @include       http://www.mypage.com
// ==/UserScript==

alert('Hello world!');


On sauvegarde ça dans un fichier dont le nom se termine par .user.js, et on l'ouvre avec Firefox, et paf, le plug-in GreaseMonkey nous propose de l'installer. Une fois ceci fait, dès qu'on va charger la page mypage.com, l'infâme boîte de dialogue Javascript s'affiche. Merveilleux. Il ne reste plus qu'à adapter l'exemple à notre problème, et ce sera très simple, puisqu'il suffira de remplacer la ligne de Javascript par :
document.getElementById('content').rows = 50;


Et hop, ça marche. Dès qu'on charge un site listé dans @include contenant un élément d'id "content" (ce qui est le cas de Wordpress), notre script va positionner le champ "rows" à 50.

Un petit détail: une fois le fichier .user.js installé, modifier ce fichier là ne sert à rien, car Firefox en garde une copie quelque part dans son ~/.mozila/firefox/. Il faut donc soit le réinstaller à chaque fois, soit aller dans les préférences de GreaseMonkey et utiliser le bouton Edit pour éditer un script déjà installé.
Il y a 9 commentaires sur cette page. [Afficher commentaires/formulaire]