Curso: Creación de extensiones para Firefox: 2. IDE de Extensiones

hace 3 años y 5 meses - 1571 visitas

Creación de extensiones para Firefox

Prólogo

1. Introducción

2. IDE de Extensiones

Lo llamaremos FEIDE (Firefox Extensions IDE). Todo desarrollo debe hacerse sobre un IDE, y ya que Firefox no provee de forma directa uno, nosotros nos vamos a crear el nuestro.

Este IDE no contará con un GUI, más allá del IDE que usemos para escribir código (Zend Studio en mi caso), y algún IDE que encontréis para desarrollar XUL. Hasta el momento no he encontrado ningún IDE para XUL que me convenza, pero si encontráis alguno decente no dudéis en comentarlo por aquí.

NOTA: A lo largo del curso haré las explicaciones exclusivamente para Linux, aunque haré una excepción en este capítulo. Motivo: no me gusta Windows, no lo uso, y no tengo tiempo para molestarme en buscar cómo se hace algo en Windows. Quien quiera aportar esa información, o la de cualquier otro OS, en los comentarios será bien recibida.

2.1. Directorio de trabajo

Lo primero que debemos hacer, es crear un directorio de trabajo:

c:\extensiones o ~/extensiones, dependiendo de si usamos Windows o Linux.

En ese directorio crearemos los directorios de nuestra extensión, de un perfil de Firefox para desarrollo, y de utilidades para testear extensiones, ejecutar un Firefox de desarrollo, etc.

Ejemplo:

  • ~/extensiones
    • miextension/
      • content/
      • locale/
      • skin/
      • install.rdf
      • chrome.manifest
    • firefox-dev.profile/
    • firefox-dev.sh

2.2. Perfil de desarrollo en Firefox

Seguramente tengas tu Firefox bastante saturado de extensiones, como esa molesta pero bonita extensión llamada RainFox... Así que lo que haremos será crearnos una copia limpia de Firefox, o lo que es lo mismo, crearemos un perfil en Firefox sólo para desarrollo.

Para ello, en nuestro directorio de trabajo, lo primero que haremos será crear un script para lanzar Firefox con dicho perfil:

Windows: firefox-dev.bat 
@echo off
"C:\Archivos de programa\Mozilla Firefox\firefox.exe" -P dev -console -moz-no-remote


Linux: firefox-dev.sh 
#!/bin/sh
firefox -P dev -console -moz-no-remote

En Linux podemos crear un lanzador, y configurarlo para que sea abra con una terminal:

pantallazopropiedades_del_lanzador_400

Los parámetros significan lo siguiente:

  • -P profile
    • Carga el perfil con nombre profile. Si no existe el perfil os saldrá la ventana de gestión de perfiles.
  • -console
    • Muestra por consola los mensajes enviados desde Firefox a través de la función Javascript dump().
  • -moz-no-remote
    • Con este parámetro conseguimos abrir varias instancias distintas de Firefox, para, por ejemplo, abrir Firefox con nuestro perfil por defecto, y otro Firefox con el perfil de desarrollo sin extensiones, y que podamos abrir y cerrar constantemente.

En Linux será necesario darle permisos de ejecución:

$ sudo chmod 770 firefox-dev.sh

Ejecutamos nuestro script, y nos saldrá la ventana de perfiles de Firefox. Seleccionamos "Crear perfil", y luego a "Siguiente".

pantallazofirefox__choose_user_profile_400

Seleccionamos el directorio "c:\extensiones\firefox-dev.profile" o "~/extensiones/firefox-dev.profile", mediante el botón "Elegir carpeta/directorio" (o "Choose Folder"). Le ponemos como nombre del perfil "dev", y le damos a "Terminar".

pantallazocreate_profile_wizard_400 

Ya tenemos nuestro nuevo y limpio perfil, listo para usarlo. Podemos ejecutar ahora mismo Firefox con el perfil "dev" pulsando sobre "Iniciar Firefox".

pantallazofirefox__choose_user_profile1_400

La próxima vez que ejecutemos nuestro script se abrirá el perfil "dev" de forma automática sin tener que pasar por este proceso de nuevo. Recordad que después de crear este perfil, si intentáis ejecutar vuestro Firefox anterior, cargará el perfil dev. Para volver a ejecutar Firefox con vuestro perfil antiguo, debéis ejecutarlo así:

$ firefox -P default -moz-no-remote

2.3. Extensiones útiles para desarrollar extensiones

Hay muchas extensiones que nos facilitarán la vida a la hora de desarrollar extensiones. Yo recomiendo instalar (en el nuevo perfil "dev") de momento las siguientes extensiones, y SÓLO las siguientes extensiones:

  • FireBug
    • No podrás vivir sin él una vez que lo tengas instalado. Con esta extensión, dispondremos a golpe de click una línea de comandos para la consola JavaScript, un panel de mensajes de consola, un depurador Javascript, y un maravilloso "Inspector" del DOM.
    • Aunque no está pensado para depurar extensiones, nos será muy útil para pruebas, edición de CSS "en tiempo de ejecución", inspeccionar páginas web, etc.
  • Restart Firefox
    • Con esta extensión dispondremos de un botón para reiniciar rápidamente Firefox, y así poder ver los cambios que hayamos hecho en nuestra extensión, ahorrándonos la tediosa operación de cerrar y abrir.
    • Pero tiene un problema. Si reinicias Firefox con esta extensión perderemos los mensajes dump() que genere nuestra extensión.
  • Web Developer
    • Contiene muchas utilidades para el desarrollador web, que nos valdrán también a nosotros, los desarrolladores de extensiones.
Si conoces alguna otra extensión que nos sería de utilidad, no dudes en citarla.

2.4. Depuración de extensiones

La depuración de extensiones, es algo complicado, debido a nuestro precario y casero IDE. Pero podremos disponer de la herramienta dump(), un comando Javascript con el que poder sacar texto por la consola (por la consola terminal desde donde ejecutemos Firefox).

Pero para poder usarlo, debemos habilitarlo (siempre en nuestro perfil "dev"). Para ello, debemos crear la entrada lógica browser.dom.window.dump.enabled , y ponerlo a "true". Hay dos formas de hacerlo (o más), las dos igual de simples:

  • Creando el fichero user.js en el directorio del perfil "dev" (c:\extensiones\firefox-dev.profile\user.js o ~/extensiones/firefox-dev.profile/user.js), con el contenido:
    • user_pref("browser.dom.window.dump.enabled", true);
  • Abriendo la url "about:config" en el navegador Firefox, haciendo clic derecho en la lista, y seleccionando "Nuevo > Lógico". Introducimos en la caja browser.dom.window.dump.enabled para crear la entrada, y luego hacemos doble clic en dicha entrada para cambiar su valor a "true".

Con esto, al abrir Firefox (con el comando "-console" que pusimos en nuestro script) irán apareciendo en la terminal los mensajes que enviemos mediante dump(). Por ejemplo:

dump("Hola mundo\n");

De esta manera, podremos introducir dentro del código Javascript de nuestra extensión puntos de control que ir monitorizando en el terminal.

2.5. Empaquetado de extensiones

Vamos a crear ahora también un script para empaquetar extensiones en paquetes XPI. Lo usaremos al final del siguiente capítulo, así que no lo describiremos hasta entonces, pero como es parte de nuestro IDE, será ahora, en este capítulo, cuando lo creemos.

Lo que hará el empaquetador es muy sencillo, tan sólo comprimir (en realidad se archiva sin compresión) el directorio de una extensión en un ZIP, y renombrarlo a XPI. Para lo cual, recomiendo utilizar el compresor 7zip a los que usen Windows.

 

Windows: firefox-pack.bat 
@echo off
rm %XPINAME%
cd %EXTENSIONDIR%
7z a -tzip -mx0 ..\%XPINAME% * -r

Antes de ejecutar ese batch, debemos poner en la variable XPINAME y en EXTENSIONDIR, el nombre del fichero de la extensión y el directorio con las fuentes de la extensión respectivamente:

Windows
SET XPINAME=miextension.xpi
SET EXTENSIONDIR=/misextensiones/miextension

En Linux tenemos también 7zip, pero nos bastará con la herramienta zip. Dentro del directorio de la extensión ejecutamos:

Linux
$ zip -r0 ../miextension.xpi * 

Y con esto ya tenemos nuestro IDE listo para ser usado. En el próximo capítulo crearemos una extensión de prueba, el típico "Hola mundo", para ir tomando contacto con todos los elementos de una extensión.

NOTA: Esto lo hemos hecho para Firefox, pero Thunderbird funciona exactamente de la misma manera. Podemos crearno un perfil "dev" también en Thunderbird, y podremos crear extensiones también para Thunderbird. Tan sólo cambia el fichero de instalación (install.rdf) que trataremos en el siguiente capítulo.

Como recordaré en todos los capítulos, todo comentario, pregunta, sugerencia, propuesta, etc., serán tomadas en cuenta, y muy bien recibidas y agradecidas. 


autor

Javier Pérez de la Axarquía

Padre, marido, amante, humanista, programador, escritor, emprendedor... y algunas cosas más que aún no sé que soy.

etiquetas
artículos relacionados
comentarios
avatar de markdbd
#1
markdbd - hace 3 años y 5 meses ir arriba escribe un comentario
Muy buena la guía Javier :) Ya la hubieras podido haber hecho antes ehhh :P



Una extensión que me ayudo mucho fue Extension Developer's Extension:



ted.mielczarek.org/code/mozilla/extensiondev/
avatar de markdbd
#2
markdbd - hace 3 años y 5 meses ir arriba escribe un comentario
Aps se me olvidaba, el otro día un compañero me presento Xulbooster:



avatar de Rick
#3
Rick - hace 3 años y 5 meses ir arriba escribe un comentario
Estoy con Mark, la Extension Developer's Extension es indispensable (por ejemplo, si haces un reload del chrome no tienes que reiniciar el firefox, te crea el xpi, etc etc)
avatar de javier.perez
#4
javier.perez - hace 3 años y 5 meses ir arriba escribe un comentario
Gracias por la información Mark. js me la pidió hace ya casi un año por lo menos, y ya ves... nunca encontraba tiempo :-P

Yo probé esa extensión hace mucho tiempo y no me convenció en absoluto, pero lo mismo ahora está mejorada. Sin duda voy a echarle un buen vistazo.

Y probaré también el XulBooster :)
avatar de javier.perez
#5
javier.perez - hace 3 años y 5 meses ir arriba escribe un comentario
Rick, recargar el chrome sin reiniciar sin duda es un lujo que yo desconocía :-P Aunque teniendo un perfil de Firefox sin extensiones hace que Firefox se reinicie en 1 segundo.
avatar de Rick
#6
Rick - hace 3 años y 5 meses ir arriba escribe un comentario
Pues prueba y verás que no hay nada mejor. Al principio igual hecha para atrás un poco, pero para desarrollar extensiones es una ayuda imprescindible.



Y Mark, a ver cuando te animas a hacer tu un "Como se hizo" de tu notifier, sería muy muy interesante ;-)
avatar de javier.perez
#7
javier.perez - hace 3 años y 5 meses ir arriba escribe un comentario
Apoyo la moción de Rick... ¡queremos un howto! ;)
avatar de markdbd
#8
markdbd - hace 3 años y 5 meses ir arriba escribe un comentario
Nada nada, que para eso ya existe esta magnifica guía :)
avatar de javier.perez
#9
javier.perez - hace 3 años y 5 meses ir arriba escribe un comentario
No vas a conseguir escabullirte con el peloteo... ;)
avatar de Diego
#10
Diego - hace 3 años y 5 meses ir arriba escribe un comentario
Felicitaciones, muy bueno el curso.

Saludos
avatar de javier.perez
#11
javier.perez - hace 3 años y 5 meses ir arriba escribe un comentario
Gracias, aunque aún no ha terminado, quedan más capítulos.
avatar de novato
#12
novato - hace 3 años y 4 meses ir arriba escribe un comentario
Saludos:

Estoy iniciando con la programación de extensiones para firefox solo por diversión, como no tengo mucho tiempo requiero de algo practico para aprender, leí de tu curso, y ya segui los pasos de los temas que escribiste,y lo he puesto en practica, tengo windows y si te puedo ayudar con las pruebas pues estaré revisando tu blog, espero el siguiente tema.

Gracias por el curso creo que me será útil, ah, comencé ya a estudiar un poco de javaScript.
avatar de javier.perez
#13
javier.perez - hace 3 años y 4 meses ir arriba escribe un comentario
Hola "novato". Últimamente tengo muchísimo trabajo y tengo el blog algo abandonado, pero en breve espero volver a retomar el curso. En el próximo capítulo pondré una extensión de ejemplo.
avatar de el iluso
#14
el iluso - hace 3 años y 4 meses ir arriba escribe un comentario
Tu so gili, primero se hace el curso y luego se publica, y no se tiene a la gente esperando. Que para mi que eres un suabon y un pagafantas. Tanto bombon y luego para na.
avatar de javier.perez
#15
javier.perez - hace 3 años y 4 meses ir arriba escribe un comentario
"el iluso", me lo tengo merecido, sic. No tengo nada que apelar, excepto que lo terminaré lo antes posible.
escribe un comentario

Se permite código HTML: <a> <img> <b> <strong> <em> <i> <strike> <p>

#16
- hace 1 segundo
Normas de uso
El autor del comentario se hace responsable del contenido de éste. En caso de que el autor del comentario infringiera alguna ley, se ofrecerán todos los datos necesarios a las autoridades pertinentes para que tomen las medidas oportunas.
Se debe escribir correctamente en el mismo idioma del artículo que se comenta. En caso contrario podría ser eliminado.
El comentario debe ceñirse a la temática del artículo.

En la siguiente lista de palabras, haz clic en ide:
  1. curso
  2. creacion
  3. de
  4. extensiones
  5. para
  6. firefox
  7. 2
  8. ide
Esta pregunta es para evitar comentarios spam. Perdón por las molestias.