Las Aplicaciones XULRunner, extensiones, y temas comparten todos una estructura de directorios común, y en algunos casos el mismo paquete puede ser usado como una aplicación XULRunner independiente además de como una extensión instalable en otra aplicación. La estructura básica de un paquete (bundles) puede incluir cualquiera de los siguientes ficheros:
/install.rdfManifiesto de instalación de tema/extensión /application.iniManifiesto de lanzamiento de la aplicación /components/*Componentes y ficheros XPT (>=1.7) /defaults/preferences/*.jsOpciones por defecto (>=1.7) /plugins/*Plugins NPAPI (>=1.8) /chrome.manifestManifiesto de registro de Chrome (>=1.8) /chrome/icons/default/*Iconos de la ventana (>=1.8)
Por supuesto, una extensión no necesita (y normalmente no tendrá) todos estos directorios. Los temas están limitados por razones de seguridad y normalmente no pueden proporcionar un chrome.manifest que registre un tema y un fichero JAR.
Subdirectorios específicos de una plataforma
En algunos casos una única extensión o aplicación puede necesitar incluir componentes binarios o plugins para múltiples plataformas, o los autores de temas pueden querer incluir varios ficheros JAR específicos a una plataforma. Para facilitar las cosas en el primer caso, el cargador de la extensión/aplicación tendrá unos subdirectorios especiales previstos específicamente para los ficheros concretos de una plataforma (a partir del Toolkit/Gecko 1.8, Firefox/Thunderbird 1.5). La cadena de texto de la plataforma es definida por el proceso de compilación del toolkit con un único valor para la combinación del sistema operativo, arquitectura del procesador y el compilador. El formato de la cadena de texto de la plataforma es:
{OS_TARGET}_{TARGET_XPCOM_ABI}
Todos los ficheros que son cargados desde el directorio principal de la extensión son cargados desde el subdirectorio
/platform/{cadena de texto de la plataforma}
si existe. Por ejemplo, si un vendedor de plugins que busque el dejarlo disponible para un usuario de ordenadores con Linux, Macintosh y Windows, este proporcionará los siguientes ficheros:
/platform/Linux_x86-gcc3/plugins/libMyPlugin.so /platform/WINNT_x86-msvc/plugins/MyPlugin.dll /platform/Darwin_ppc-gcc3/plugins/libMyPlugin.dylib
Dado que los ficheros XPT no dependen de la plataforma, cualquier fichero XPT asociado entraría en el directorio de componentes genérico:
/components/MyPlugin.xpt
Si una extensión tiene código específico a una plataforma no binaria (como el código que utiliza la base de registros de Windows desde un script), también puede utilizar el identificador del sistema operativo como subdirectorio de plataforma:
/platform/WINNT/components/registerDoctype.js
Cuando un fichero JAR específico a una plataforma es usado, cada directorio de plataforma debe tener su propio fichero chrome.manifest
:
chrome.manifest chrome/mytheme-base.jar platform/Darwin/chrome.manifest platform/Darwin/chrome/mytheme-mac.jar platform/WINNT/chrome.manifest platform/WINNT/chrome/mytheme-win.jar
El proceso de arranque analiza en primer lugar el directorio base, después los directorios de plataforma aplicables (en primer lugar /{OS_TARGET}/, a continuación /{OS_TARGET}_{TARGET_XPCOM_ABI}/). Cuando las preferencias por defecto se definen en varios directorios, los que se cargan al final tienen prioridad sobre los que se cargan antes.
Ficheros de extensión específicos a una aplicación
Además de los ficheros de extensión listados más arriba, las aplicaciones pueden leer ficheros suplementarios desde extensiones. Por ejemplo, Firefox 1.5 y superiores pueden leer los plugins de búsqueda de Sherlock desde /searchplugins/*.src Firefox 2 y superiores además pueden leer Plugins MozSearch y OpenSearch desde
/searchplugins/*.xml
y los diccionarios Myspell desde
/dictionaries/*.{aff|dic}
Referencias oficiales de Herramienta API
- Structure of an Installable Bundle: describes the common structure of installable bundles, including extensions, themes, and XULRunner applications
- Extension Packaging: specific information about how to package extensions
- Theme Packaging: specific information about how to package themes
- Multiple-item Extension Packaging: specific information about multiple-item extension XPIs
- XUL Application Packaging: specific information about how to package XULRunner applications
- Chrome Registration