Solo los usuarios de Linux pueden instalar extensiones alojadas fuera de Chrome Web Store. En este artículo, se describe cómo empaquetar, alojar y actualizar archivos .crx
desde un servidor personal. Si
distribuyes una extensión o un tema solo a través de Chrome Web Store, consulta Web Store
Hosting and Updates.
Presentación
Las extensiones y los temas se entregan como archivos .crx
. Cuando subes archivos a través del Panel para desarrolladores de Chrome , el panel crea el archivo .crx
automáticamente. Si se publica en un servidor personal, el archivo .crx
deberá crearse de forma local o descargarse desde Chrome Web Store.
Descargar .crx desde Chrome Web Store
Si una extensión está alojada en Chrome Web Store, el archivo .crx
se puede descargar desde el Panel del desarrollador. Ubica la extensión en "Tus fichas" y haz clic en "Más información". En la ventana emergente, haz clic en el vínculo azul main.crx
para descargarlo.
El archivo descargado se puede alojar en un servidor personal. Esta es la forma más segura de alojar una extensión de forma local, ya que el contenido de la extensión estará firmado por Chrome Web Store. Esto ayuda a detectar posibles ataques y manipulaciones.
Crea .crx de forma local
Los directorios de las extensiones se convierten en archivos .crx
en la página Administración de extensiones. Navega a
chrome://extensions/
en el cuadro multifunción, o haz clic en el menú de Chrome, coloca el cursor sobre “Más herramientas” y
selecciona “Extensiones”.
En la página Administración de extensiones, habilita el modo de desarrollador. Para ello, haz clic en el interruptor junto a Modo de desarrollador. Luego, seleccione el botón EXTENSIÓN DEL PAQUETE.
Especifica la ruta de acceso a la carpeta de la extensión en el campo del directorio raíz de la extensión y, luego, haz clic en el botón PACK EXTENSION. Ignora el campo Clave privada para los paquetes nuevos.
Chrome creará dos archivos: .crx
y .pem
, que contienen la clave privada de la extensión.
No pierdas la clave privada. Mantén el archivo .pem
en un lugar secreto y seguro, ya que será
necesario para actualizar la extensión.
Actualiza un paquete .crx
Para actualizar el archivo .crx
de una extensión, aumenta el número de versión en manifest.json
.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Regrese a la página Administración de extensiones y haga clic en el botón EXTENSIÓN DEL PAQUETE. Especifica la ruta de acceso al directorio de extensiones y la ubicación de la clave privada.
La página proporcionará la ruta de acceso para la extensión empaquetada actualizada.
Cómo empaquetar mediante la línea de comandos
Empaqueta extensiones en la línea de comandos invocando a chrome.exe
. Usa la marca --pack-extension
para especificar la ubicación de la carpeta de la extensión y la marca --pack-extension-key
para especificar la ubicación del archivo de claves privadas de la extensión.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Hosting
Un servidor que aloja archivos .crx
debe usar encabezados HTTP adecuados para permitir que los usuarios instalen la extensión mediante un clic en un vínculo.
Google Chrome considera que un archivo puede instalarse si se cumple cualquiera de las siguientes condiciones:
- El archivo tiene el tipo de contenido
application/x-chrome-extension
- El sufijo del archivo es
.crx
, y ambas condiciones son verdaderas:- El archivo no se publica con el encabezado HTTP
X-Content-Type-Options: nosniff
- El archivo se publica con uno de los siguientes tipos de contenido:
- string vacía
- "text/plain"
- "application/octet-stream"
- "desconocido/desconocido"
- "aplicación/desconocido"
- "*/*"
- El archivo no se publica con el encabezado HTTP
El motivo más común por el que no se reconoce un archivo instalable es que el servidor envía el encabezado X-Content-Type-Options: nosniff
. El segundo motivo más común es que el servidor envía un tipo de contenido desconocido, que no está en la lista anterior. Para solucionar un problema de encabezado HTTP, cambia la configuración del servidor o intenta alojar el archivo .crx
en otro servidor.
Actualización en curso
Cada pocas horas, el navegador revisa las extensiones instaladas en busca de una URL de actualización. Para cada uno, envía una solicitud a esa URL en busca de un archivo en formato XML de manifiesto de actualización.
- El contenido que muestra una verificación de actualización es un documento XML del manifiesto de actualización que enumera la versión más reciente de una extensión.
Si el manifiesto de actualización menciona una versión más reciente que la que se instaló, el navegador descargará e instalará la nueva versión. Al igual que con las actualizaciones manuales, el nuevo archivo .crx
debe estar firmado con la misma clave privada que la versión instalada actualmente.
URL de actualización
Las extensiones alojadas en servidores fuera de Chrome Web Store deben incluir el campo update_url
en su archivo manifest.json
.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Actualizar manifiesto
El manifiesto de actualización que muestra el servidor debe ser un documento XML.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
Este formato XML se toma del que usa Omaha, la infraestructura de actualización de Google. El sistema de extensiones usa los siguientes atributos para los elementos <app>
y <updatecheck>
del manifiesto de actualización:
appid | El ID de extensión se genera en función de un hash de la clave pública, como se describe en empaquetado. El ID de una extensión se muestra en la página Administración de extensiones |
base de código | Una URL HTTPS al archivo .crx . |
version | El cliente lo usa para determinar si debe descargar el archivo .crx especificado por codebase . Debe coincidir con el valor de “version” en el archivo manifest.json del archivo .crx . |
El archivo XML del manifiesto de actualización puede contener información sobre varias extensiones, ya que incluye varios elementos <app>.
Prueba
La frecuencia predeterminada de verificación de actualizaciones es de varias horas, pero se puede forzar la actualización mediante el botón Actualizar las extensiones ahora, en la página Administración de extensiones.
Esta acción iniciará las verificaciones de todas las extensiones instaladas.
Uso avanzado: parámetros de solicitud
El mecanismo básico de actualización automática está diseñado para que el funcionamiento del servidor sea tan fácil como colocar un archivo XML estático en cualquier servidor web simple, como Apache, o actualizar ese archivo en formato XML a medida que se lanzan nuevas versiones de extensiones.
Los desarrolladores que alojan varias extensiones pueden verificar los parámetros de la solicitud, que indican el ID y la versión de la extensión en la solicitud de actualización. Incluir estos parámetros permite que las extensiones se actualicen desde la misma URL que ejecuta un código dinámico del servidor en lugar de un archivo en formato XML estático.
El formato de los parámetros de solicitud es el siguiente:
?x=EXTENSION_DATA
Donde EXTENSION_DATA
es una string codificada como URL del formato:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Por ejemplo, dos extensiones dirigen a la misma URL de actualización (https://test.com/extension_updates.php
):
- Extensión 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versión: “1.1”
- Extensión 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Versión: “0.4”
La solicitud para actualizar cada extensión individual sería
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
y
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Se pueden enumerar varias extensiones en una sola solicitud para cada URL de actualización única. En el ejemplo anterior, si un usuario tiene instaladas las dos extensiones, las dos solicitudes se combinan en una sola:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Si la cantidad de extensiones instaladas que usan la misma URL de actualización es lo suficientemente grande como para que una URL de solicitud GET sea demasiado larga (más de 2,000 caracteres), la verificación de actualización emitirá solicitudes GET adicionales según sea necesario.
Uso avanzado: versión mínima del navegador
A medida que se agreguen más APIs al sistema de extensiones, es posible que se lance una versión actualizada de una extensión que solo funcionará con versiones más recientes del navegador. Si bien Google Chrome en sí se actualiza automáticamente, pueden pasar algunos días antes de que la mayoría de la base de usuarios se actualice con una versión nueva. Para asegurarte de que una actualización determinada se aplique solo a las versiones de Google Chrome posteriores a una versión específica, agrega el atributo "prodversionmin" al elemento
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
</app>
</gupdate>
Esto garantizaría que los usuarios se actualicen automáticamente a la versión 2 solo si ejecutan Google Chrome 3.0.193.0 o una versión posterior.