IntroducciónEsto es un pequeño tutorial de como crear extensiones para Firefox. Las extensiones de firefox y thunderbird están hechas con XUL y JavaScript. XUL es un lenguaje muy parecido a XML así que es bien fácil de entender. No soy un experto ni nada parecido en esto pero aprendí un poco y quiero compartirlo para ver si motivo a alguien y termina haciendo grandes extensiones

Durante este pequeño how-to estaremos creando el típico Hola Mundo.
+ Materiales:
• Firefox (version 1.5+)
• Editor de Texto
• Conocimiento de JavaScript
• WinZip o algo que haga la misma función
Primero tenemos que definir una estructura de árbol que es prácticamente la base:
/chrome/chromeFiles/content
/defaults/preferences
El InstaladorEl instalador es un archivo llamado
install.rdf que pueden crearlo con cualquier editor de texto. Este es un simple instalador que pueden modificar para usarlo:
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>tu@email.com</em:id>
<em:version>1.0</em:version>
<em:type>2</em:type>
<!-- Target Application this extension can install into,
with minimum and maximum supported versions. -->
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>1.5</em:minVersion>
<em:maxVersion>1.5.0.4</em:maxVersion>
</Description>
</em:targetApplication>
<!-- Front End MetaData -->
<em:name>Nombre de tu extensión</em:name>
<em:description>Descripción de que hace</em:description>
<em:creator>El Autor</em:creator>
<em:homepageURL>http://www.elhacker.net/</em:homepageURL>
</Description>
</RDF>
Este instalador es para las versiones de Firefox de 1.5 en adelante, en versiones previa era distinto y en las mas antiguas era con un archivo de javascript. Veamos:
• El ID donde dice
tu@email.com es un ID de quien lo creo la extensión, anteriormente había que crear un ID con un programa, una larga tontería.
• La Version es la version de tu extensión no se sugiere poner 1.0 hasta que no este completamente estable tu extensión.
• TYPE esto debería de quedarse así el 2 especifica que es una extensión no se que son los otros, quizás plugins.
• MinVersion deberían de dejarlo así porque es la version mínima de firefox que soportaras. La MaxVersion si puedes cambiarlo según te vaya funcionando con Firefox superiores
Lo último se entiende y lo demás dejarlo igual. El segundo ID que parece cosas aleatorias es una identificación de Firefox. Antes de continuar se me había olvidado decirles que todo esto es CASE SENSITIVE, diferencia minúsculas de mayúsculas, no es lo mismo CASA , Casa , CaSa.
MenúsAhora estaremos creando nuestro primer XUL, este va servir para ser sobre añadido al del firefox. Aquí esta el ejemplo:
<?xml version="1.0"?>
<overlay id="browsero"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Importa nuestro JavaScript. -->
<script type="application/x-javascript"
src="chrome://holamundo/content/funciones.js">
</script>
<!-- Para el menu de Click Derecho. -->
<popup id="contentAreaContextMenu">
<menuitem id="helloworld" label="Hola Mundo" accesskey="H"
insertafter="context-stop" oncommand="run();"/>
</popup>
<!-- Para el menú de Herramientas. -->
<menupopup id="menu_ToolsPopup">
<menuitem insertafter="devToolsSeparator" label="Hola Mundo"
accesskey="H" oncommand="run();" />
</menupopup>
</overlay>
Ahora explicamos por pedazos. Podemos notar que en todos los xul y casi todos los documentos a excepción a los de javascript tienen de cabecera
<?xml version="1.0"?> , esta es la cabecera indicando la version de XML y es vital.
<overlay id="browsero"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
Este pedazo de código indica que el overlay (en realidad no se una definición exacta de esto pero es algo como para pasar por encima, para sobre escribir y añadir) tiene de ID browsero, esto podemos modificarlo por el nombre que queramos lo de XMLNS lo pueden dejar igual. Es muy importante recordar que nunca deberíamos tener dos elementos con ID iguales porque causara problemas, uno no funcionara.
<script type="application/x-javascript"
src="chrome://holamundo/content/funciones.js">
</script>
Para los que han programado en javascript alguna ves, saben que esto es para importar un JavaScript externo, un javascript que esta localizado en un archivo llamado
funciones.js . Lo que si pueden encontrar curioso es la tipo de dirección, chrome es llamado a las ventanas de XUL, es un tipo de ventana algo distinto. El holamundo es el nombre que le daremos al overlay , esto lo veremos mas adelante en el archivo
chrome.manifest . Si no queremos poner el javascript externo podemos hacerlo ahí mismo estilo html.
<popup id="contentAreaContextMenu">
<menuitem id="helloworld" label="Hola Mundo" accesskey="H"
insertafter="context-stop" oncommand="run();"/>
</popup>
En esto no estoy muy claro, el ID del popup creo que se refiere al nombre del ID que Firefox le da al menú de Click Derecho. Lo demás es un poco comprensible, el accesskey se refiere a la tecla por cual podamos acceder a esto alt+H o ctrl+H dependiendo de tu sistema, el insertafter es insertar luego de que también parece ser una variable de Firefox el context-stop. Y lo más importante es el oncommand , esto se refiere a lo que sucederá al tener una acción, ser clickeado más específicamente. Como vemos esto llamara a una función llamada run() en nuestro archivo de javascript.
El JavaScriptLas extensiones están compuesta de dos partes básicas el XUL que son los formularios y/o ventanas y el JavaScript que es el código que hace que interactúa con todo el alrededor. Es altamente sugerible leer varios tutoriales o un libro completo de JavaScript que enseñe a usar los objetos. Para interactuar con los elementos de XUL se usa document.getElementById('iddelelemento') los que han programado JavaScript un poco avanzado o han programado en Ajax entenderán perfectamente esto. Para seguir con nuestro how-to crearemos el
funciones.js en la carpeta de
content . Y le pondremos el siguiente código:
function run()
{
alert('Hola Mundo');
}
Esto es una simple función llamada run() que es la que es llamada al menú recibir acción. Solo tendrá un alert() que es un messagebox con el mensaje Hola Mundo.
chrome.manifestEste archivo deben de crearlo en la carpeta root, no en ninguna de las carpetas creadas sino en la carpeta principal. Esto es como un .htaccess (los webmasters comprenderán) , indica donde va todo y los overlay que vas hacer. Para este simple hola mundo solo tendremos que ponerle dos líneas:
content holamundo chrome/chromeFiles/content/
overlay chrome://browser/content/browser.xul chrome://holamundo/content/browsero.xulLa primera línea indica la ruta a donde estará el contenido de nuestra extensión, por eso veíamos anteriormente que la dirección era
chrome://holamundo/content/cualquierarchivo . La segunda línea indica el overlay, lo que vamos a sobre escribir o agregar, le agregaremos a
chrome://browser/content/browser.xul que es donde esta la configuración del browser y el 2do argumento es el archivo que le agregaremos para modificaciones.
Compilando e InstalandoCompilar todo esto es bien simple, es solamente meter todo en un zip. Metemos todo lo que esta en la carpeta root, incluyendo las carpetas chrome y defaults (se que no hicimos nada aquí). Luego que tengamos todo en un zip le cambiamos la extensión por
.xpi . Luego para instalar simplemente abrimos el Firefox le damos a Ctrl+O y buscamos el archivo, se instalara nos pedirá que reiniciemos el Firefox para ver los efectos y al reiniciar deberías de poder ver tus menú y el Hola Mundo al dar click.
Durante la instalación tendrás que esperar unos 5 segundos, esto es debido a que no esta firmado, para que una extensión este firmada tienen que comunicarse con Mozilla para que ellos te lo firmen y lo acepten como una extensión valida y verificada. Esto es para evitar que se descarguen extensiones maliciosas y luego culpen a Mozilla.
Referencias• XUL Planet (
http://www.xulplanet.com/) el mejor lugar para aprender todo sobre XUL.
• JavaScript (
http://www.w3schools.com/js/default.asp) , la escuelita del JavaScript.
• Foro de MozillaZine (
http://forums.mozillazine.org/viewforum.php?f=19) tienen gran soporte para los iniciados y avanzados.
• Google (tengo que decirlo?) lo que no encuentras aquí no lo encuentras en ningún lado.
• ElHacker.net (
foro.elhacker.net) , pueden comunicarse conmigo por aquí.
---------------------------------------------------------------
Cualquier duda y/o sugerencia y aportes son resividos
