Linux est la seule plate-forme sur laquelle les utilisateurs de Chrome peuvent installer des extensions hébergées en dehors du Chrome Web Store. Cet article explique comment empaqueter, héberger et mettre à jour des fichiers crx
à partir d'un serveur Web à usage général. Si vous ne distribuez une extension ou un thème que via le Chrome Web Store, consultez la page Hébergement et mise à jour du Web Store.
Empaqueter
Les extensions et les thèmes sont diffusés sous forme de fichiers .crx
. Lorsque vous importez des données via le tableau de bord du développeur Chrome, celui-ci crée automatiquement le fichier crx
. S'il est publié sur un serveur personnel, le fichier crx
doit être créé localement ou téléchargé sur le Chrome Web Store.
Télécharger un fichier .crx depuis le Chrome Web Store
Si une extension est hébergée sur le Chrome Web Store, le fichier .crx
peut être téléchargé à partir du tableau de bord du développeur. Recherchez l'extension dans la section "Vos fiches", puis cliquez sur "Plus d'infos". Dans la fenêtre pop-up, cliquez sur le lien bleu main.crx
pour le télécharger.
Le fichier téléchargé peut être hébergé sur un serveur personnel. Il s'agit du moyen le plus sécurisé d'héberger une extension en local, car son contenu sera signé par le Chrome Web Store. Cela permet de détecter les attaques et la falsification potentielles.
Créer un fichier .crx en local
Les répertoires d'extensions sont convertis en fichiers .crx
sur la page de gestion des extensions. Accédez à chrome://extensions/
dans l'omnibox ou cliquez sur le menu Chrome, maintenez le pointeur sur "Plus d'outils", puis sélectionnez "Extensions".
Sur la page "Gestion des extensions", activez le mode développeur en cliquant sur le bouton à côté de Mode développeur. Sélectionnez ensuite le bouton PACK EXTENSION.
Indiquez le chemin d'accès au dossier de l'extension dans le champ "Répertoire racine de l'extension", puis cliquez sur le bouton PACK EXTENSION. Ignorez le champ Private key (Clé privée) pour un package de première fois.
Chrome crée deux fichiers : un fichier .crx
et un fichier .pem
, qui contient la clé privée de l'extension.
Ne perdez pas la clé privée ! Conservez le fichier .pem
dans un endroit secret et sécurisé. Il sera nécessaire pour mettre à jour l'extension.
Mettre à jour un package .crx
Mettez à jour le fichier .crx
d'une extension en augmentant le numéro de version dans manifest.json
.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Revenez à la page de gestion des extensions, puis cliquez sur le bouton PACK EXTENSION. Spécifiez le chemin d'accès au répertoire des extensions et l'emplacement de la clé privée.
La page fournit le chemin d'accès à l'extension empaquetée mise à jour.
Créer un package via la ligne de commande
Empaquetez des extensions dans la ligne de commande en appelant chrome.exe
. Utilisez l'option --pack-extension
pour spécifier l'emplacement du dossier de l'extension et l'option --pack-extension-key
pour spécifier l'emplacement du fichier de clé privée de l'extension.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Hôte
Un serveur qui héberge des fichiers .crx
doit utiliser des en-têtes HTTP appropriés pour permettre aux utilisateurs d'installer l'extension en cliquant sur un lien.
Google Chrome considère qu'un fichier peut être installé si l'une des conditions suivantes est remplie:
- Le fichier a le type de contenu
application/x-chrome-extension
- Le suffixe du fichier est
.crx
, et les deux conditions suivantes sont vraies :- Le fichier n'est pas diffusé avec l'en-tête HTTP
X-Content-Type-Options: nosniff
. - Le fichier est diffusé avec l'un des types de contenu suivants:
- chaîne vide
"text/plain"
"application/octet-stream"
"unknown/unknown"
"application/unknown"
"\*/\*"
- Le fichier n'est pas diffusé avec l'en-tête HTTP
La raison la plus courante de l'échec de la reconnaissance d'un fichier installable est que le serveur envoie l'en-tête X-Content-Type-Options: nosniff
. La deuxième raison la plus courante est que le serveur envoie un type de contenu inconnu, qui ne figure pas dans la liste précédente. Pour résoudre un problème d'en-tête HTTP, modifiez la configuration du serveur ou essayez d'héberger le fichier .crx
sur un autre serveur.
Mettre à jour
Toutes les deux ou trois heures, le navigateur recherche l'URL de mise à jour des extensions installées. Pour chacun d'eux, il envoie une requête à cette URL à la recherche d'un fichier XML manifeste de mise à jour.
- Le contenu renvoyé par une vérification de mise à jour est un document XML de manifeste de mise à jour qui répertorie la dernière version d'une extension.
Si le fichier manifeste de mise à jour mentionne une version plus récente que celle installée, le navigateur télécharge et installe la nouvelle version. Comme pour les mises à jour manuelles, le nouveau fichier .crx
doit être signé avec la même clé privée que la version actuellement installée.
Mettre à jour l'URL
Les extensions hébergées sur des serveurs en dehors du Chrome Web Store doivent inclure le champ update_url
dans leur fichier manifest.json
.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Mettre à jour le fichier manifeste
Le fichier manifeste de mise à jour renvoyé par le serveur doit être un document 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>
Ce format XML s'inspire de celui utilisé par Omaha, l'infrastructure de mise à jour de Google. Le système d'extensions utilise les attributs suivants pour les éléments <app>
et <updatecheck>
du fichier manifeste de mise à jour:
- appid
- L'ID d'extension est généré sur la base d'un hachage de la clé publique, comme décrit dans la section Packaging. L'ID d'une extension s'affiche sur la page de gestion des extensions.
- codebase
- URL HTTPS vers le fichier
.crx
. - version
- Utilisé par le client pour déterminer s'il doit télécharger le fichier
.crx
spécifié parcodebase
. Il doit correspondre à la valeur "version" du fichiermanifest.json
du fichier.crx
.
Le fichier manifeste XML de mise à jour peut contenir des informations sur plusieurs extensions en incluant plusieurs éléments <app>
.
Tests
La fréquence de vérification des mises à jour par défaut est de plusieurs heures, mais vous pouvez forcer une mise à jour à l'aide du bouton Mettre à jour les extensions maintenant sur la page de gestion des extensions.
La vérification de toutes les extensions installées démarre.
Utilisation avancée: paramètres de requête
Le mécanisme de mise à jour automatique de base est conçu pour rendre le travail côté serveur aussi facile que de déposer un fichier XML statique sur n'importe quel serveur Web standard, tel qu'Apache, et de mettre à jour ce fichier XML à mesure que de nouvelles versions d'extension sont publiées.
Les développeurs qui hébergent plusieurs extensions peuvent vérifier les paramètres de requête, qui indiquent l'ID et la version de l'extension dans la requête de mise à jour. L'inclusion de ces paramètres permet aux extensions de se mettre à jour à partir de la même URL qui exécute du code dynamique côté serveur au lieu d'un fichier XML statique.
Le format des paramètres de requête est le suivant:
?x=EXTENSION_DATA
Où EXTENSION_DATA
est une chaîne encodée au format URL, au format suivant:
id=EXTENSION_ID&v=EXTENSION_VERSION
Par exemple, deux extensions pointent vers la même URL de mise à jour (https://test.com/extension_updates.php
):
- Extension 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" (TRANSLATED BY THE SECOND TASK)
- Version: "1.1"
- Extension 2
- ID: "bbbbbbbbbbbbbbbbbb"
- Version: "0.4"
La demande de mise à jour de chaque extension individuelle serait,
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
et
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Plusieurs extensions peuvent être listées dans une même requête pour chaque URL de mise à jour unique. Pour l'exemple précédent, si un utilisateur a installé les deux extensions, elles sont fusionnées en une seule:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Si le nombre d'extensions installées utilisant la même URL de mise à jour est suffisamment élevé pour qu'une URL de requête GET soit trop longue (environ 2 000 caractères), la vérification de mise à jour émet des requêtes GET supplémentaires si nécessaire.
Utilisation avancée: version minimale du navigateur
À mesure que des API sont ajoutées au système d'extensions, une version mise à jour d'une extension qui ne fonctionne qu'avec les versions les plus récentes du navigateur peut être publiée. Bien que Google Chrome soit automatiquement mis à jour, quelques jours peuvent s'écouler avant que la majorité de la base d'utilisateurs ne passe à une nouvelle version. Pour vous assurer qu'une mise à jour donnée ne s'appliquera qu'aux versions de Google Chrome supérieures ou égales à une version spécifique, ajoutez l'attribut "prodversionmin" à l'élément <app>
dans la réponse de la mise à jour.
<?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>
Ainsi, les utilisateurs ne passeront automatiquement à la version 2 que s'ils exécutent Google Chrome 3.0.193.0 ou une version ultérieure.