Manovrare Firefox tramite Console

Ed eccoci al secondo post di questo blog.
Visto il primo riguardo il PHP, ora passiamo ad un’altra grande passione: Mozilla.

In particolare quest’oggi, tra i tantissimi progetti di questa fondazione, parleremo del mitico browser dalla volpe infuocata e di come poter entrare tramite terminale e “muovere” il browser tramite dei comandi.

Sebbene questo post potrà essere apprezzato parecchio dai programmatori web, potrà risultare interessante a coloro che si sono avvicinati da poco al mondo della programmazione, specie se in JavaScript.

Come spero sappiate l’intero browser si muove grazie ad un motore scritto in JavaScript. E vi chiederete: “Come può JavaScript allora scrivere file sul computer?”
Questa, come tante altre funzioni del browser è realizzata grazie a componenti esterni, principalmente XPCOM. Veri e propri programmi in C o Java. Non dilunghiamoci ora. Quello delle API Mozilla sarà un prossimo post ;)

Sebbene ci siano più metodi per entrare in una shell javascript che muova Firefox (SD Connector, JSSH, JavaScript Shell Server -> Developer Mozilla), ho scelto quello di MozRepl che è uno dei pochissimi che è compatibile con più piattaforme di base Mozilla, ed essendo un add-on .xpi è di facilissima installazione e non bisogna ri-compilare il browser.

Era il lontano 27 giugno 2009 a Firenze, quando insieme ad un’altra quarantina di programmatori, due “agenti” della Mozilla Europe e due fantastici relatori, si svolse il Mozilla Add-On Workshop 2009 (MAOW). Io ero là, probabilmente il più giovane che aveva progettato un’add-on, e probabilmente anche il più giovane dei presenti :D
Rimasi affascinato dall’esposizione e ancora di più dal quel frammento di frase “telnet su firefox”.
Mentre scrivo questo articolo, a distanza di più di un anno, scopro che uno dei due relatori  (Massimiliano alias bard) è all’origine di MozRepl, l’estensione che, tra poco, andrò ad illustrare.

L’istallazione di MozRepl avviene semplicemente attraverso il file .xpi installabile/scaricabile da QUI.
Una volta installato, va abilitata la ricezione sulla porta di localhost che di default è settata a 4242; per far ciò andiamo su Strumenti -> MozRepl -> Start (che ovviamente diventerà Stop). Se vogliamo che ogni volta MozRepl parta in automatico spuntiamo la checkbox riguardo l’avvio allo startup.

Apriamo ora il nostro terminale e digitiamo:
telnet localhost 4242
(se siete su windows formattatelo potete usare l’ormai famoso PuTTy)

Ed eccoci nella schermata di MozRepl che appare come una comune shell. Segnaliamo subito che non c’è la storia dei comandi eseguiti e neanche il completamento automatico attraverso il tasto TAB. Poniamo subito il rimedio aggiungendo queste funzionalità alla nostra console.
Fa al caso nostro un programma per linux che fa da contenitore per le shell: si tratta di rlwrap con il quale avremo la storia dei comandi e l’autocompletamento. Una volta installato diamo questo comando per far partire la nostra nuova shell.
rlwrap -c -r nc localhost 4242
Bene! Ora siamo pronti a comandare il nostro browser!

Iniziamo subito con il modellare le pagine: attraverso l’oggetto content possiamo accedere al DOM della pagina corrente della scheda che stiamo visualizzando. Facciamo un esempio:

repl> content.location.href = 'http://www.google.it';
repl> content.document.getElementsByTagName('input')[2].value = 'MozRepl';
repl> content.document.getElementsByTagName('form')[0].submit();

Oplà! abbiamo cercato MozRepl su Google.it!

Ora passiamo ad osservare i metodi che ci mette a disposizione MozRepl per il debug.
repl> repl.print('a');
//stampa 'a'
repl> repl.whereAmI();
//mostra il contesto in cui siamo
repl> repl.enter(content);
//entra nel "contesto" della finestra, in modo tale che si possa scrivere codice omettendo "content." davanti
repl> repl.home();
//si torna al contesto dell'intero browser
repl> repl.load('file:///home/takeno/MozRepl/file.js');
//carica un file js
repl> repl.inspect(repl);
//dando come argomento un oggetto, restituisce tutti i metodi e proprietà
repl> repl.doc(repl.print);
//mostra la documentazione relativa, se presente


Abbiamo mostrato a  grandi linee i comandi che MozRepl mette a disposizione per il debug e l’analisi dell’ambiente.
Vediamo un esempio più complesso per concludere questo post incoraggiandovi a ispezionare il vostro browser.


//primo: apriamo una nuova scheda
repl> var tab = gBrowser.addTab("http://www.google.com/");
//secondo: impostiamo la scheda come attiva
repl> gBrowser.selectedTab = tab;
//terzo: ricambiamo l'url
repl> openUILink("http://www.firecode.it/blog");
//quarto: manipolate come volete il vostro browser!
//ed infine usciamo
repl> repl.quit();

Ed eccoci qua, possiamo dire di aver concluso per questa volta :)
In futuro cercherò di fare un’ampia panoramica sulle API XPCOM e implementarle con MozRepl.

Per ora potete divertirvi parecchio :)

Concludo con un grande ringraziamento, che non sono riuscito a dare tempo fa, a Massimiliano alias Bard e Luca alias rpl, membri del sito XULIT, che mi hanno mostrato in quelle poche ore del MAOW la potenza di Mozilla. Spero di far cosa gradita citando i loro siti e blog.

Per Massimiliano: XULIT.org, Hyperstruct, profilo su GitHub
Per Luca: XULIT.org, Ubick, profilo su GitHub, blogspot

Grazie e alla prossima!

http://xulit.org/blogs/bardXULIT.org



Ti è piaciuto l'articolo? Vota Ok oppure No. Grazie Mille!

Post Correlati:

Resta aggiornato abbonandoti al feed RSS 2.0. Puoi lasciare un commento oppure inviare un trackback dal tuo sito.

Lascia un Commento

XHTML: È possibile utilizzare questi marcatori: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>