Questions fréquentes

Si vous ne trouvez pas la réponse à votre question ici, consultez les questions fréquentes sur le Chrome Web Store, la balise [google-chrome-extension] sur Stack Overflow, le groupe Chromium-extensions ou l'aide du Store.

Questions d'ordre général

Que sont les extensions Google Chrome ?

Les extensions Google Chrome sont des applications qui s'exécutent dans le navigateur Chrome. Elles offrent des fonctionnalités supplémentaires, s'intègrent à des sites Web ou services tiers, et offrent des expériences de navigation personnalisées.

Comment configurer Chrome pour le développement d'extensions ?

Si vous utilisez une version de Chrome compatible avec les extensions, vous disposez déjà de tout ce dont vous avez besoin pour écrire votre propre extension. Vous pouvez commencer par activer le mode développeur.

Cliquez sur l'icône du menu Chrome, puis sélectionnez Extensions dans le menu Outils. Assurez-vous que la case "Mode développeur" en haut à droite est cochée. Vous pouvez maintenant actualiser les extensions, charger un répertoire de fichiers non empaqueté comme s'il s'agissait d'une extension empaquetée, et plus encore. Pour accéder à un tutoriel complet, consultez la section Premiers pas.

Quelles technologies sont utilisées pour créer des extensions pour Chrome ?

Les extensions sont écrites à l'aide des mêmes technologies Web standards que celles que les développeurs utilisent pour créer des sites Web. HTML est utilisé comme langage de balisage de contenu, CSS est utilisé pour définir les styles et JavaScript pour l'écriture de script. Chrome étant compatible avec HTML5 et CSS3, les développeurs peuvent utiliser les dernières technologies Web ouvertes telles que le canevas et les animations CSS dans leurs extensions. Les extensions ont également accès à plusieurs API JavaScript qui permettent d'exécuter des fonctions telles que l'encodage JSON et l'interaction avec le navigateur.

Les extensions du Web sont-elles extraites à chaque chargement du navigateur ?

Les extensions sont téléchargées par le navigateur Chrome lors de l'installation, puis sont exécutées sur le disque local afin d'accélérer les performances. Toutefois, si une nouvelle version de l'extension est déployée en ligne, elle sera automatiquement téléchargée en arrière-plan pour tous les utilisateurs qui ont installé l'extension. Les extensions peuvent également envoyer des requêtes de contenu distant à tout moment afin d'interagir avec un service Web ou d'extraire du nouveau contenu du Web.

Comment déterminer quelle version de Chrome est déployée sur quelle version ?

Pour savoir quelle version de Chrome est actuellement disponible sur chacune des différentes plates-formes, consultez la page omahaproxy.appspot.com. Sur ce site, les données s'affichent dans un format semblable à celui-ci:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

Chaque ligne représente des informations sur une combinaison de plates-formes et de canaux spécifique. Les plates-formes listées sont cf (Google Chrome Frame), linux, mac, win et cros (Google ChromeOS). Les chaînes listées sont canary, dev, beta et stable. Les deux numéros en quatre parties après le canal représentent les versions actuelle et précédente de Chrome déployées sur cette combinaison plate-forme. Le reste des informations est des métadonnées sur la date de la première publication des versions, ainsi que les numéros de révision associés à chaque build.

Capacités

Les extensions peuvent-elles effectuer des requêtes Ajax inter-domaines ?

Oui. Les extensions peuvent effectuer des demandes interdomaines. Pour en savoir plus, consultez cette page.

Les extensions peuvent-elles utiliser des services Web tiers ?

Oui. Les extensions peuvent effectuer des requêtes Ajax interdomaines. Elles peuvent donc appeler directement des API distantes. Les API qui fournissent des données au format JSON sont particulièrement faciles à utiliser.

Les extensions peuvent-elles encoder/décoder des données JSON ?

Oui. Étant donné que V8 (le moteur JavaScript de Chrome) accepte les méthodes JSON.stringify et JSON.parse de manière native, vous pouvez utiliser ces fonctions dans vos extensions comme décrit ici sans inclure de bibliothèques JSON supplémentaires dans votre code.

Les extensions peuvent-elles stocker des données localement ?

Oui, les extensions peuvent utiliser localStorage pour stocker des données de chaîne de façon permanente. Les fonctions JSON intégrées à Chrome vous permettent de stocker des structures de données complexes dans localStorage. Pour les extensions qui doivent exécuter des requêtes SQL sur leurs données stockées, Chrome met en œuvre des bases de données SQL côté client, qui peuvent également être utilisées.

Les extensions peuvent-elles utiliser OAuth ?

Oui, certaines extensions utilisent OAuth pour accéder aux API de données distantes. La plupart des développeurs trouvent pratique d'utiliser une bibliothèque OAuth JavaScript pour simplifier le processus de signature des requêtes OAuth.

Les extensions peuvent-elles créer une interface utilisateur en dehors de la page Web affichée ?

Oui, votre extension peut ajouter des boutons à l'interface utilisateur du navigateur Chrome. Pour en savoir plus, consultez les sections Actions du navigateur et Actions sur les pages.

Une extension peut également créer des notifications pop-up qui s'affichent en dehors de la fenêtre du navigateur. Pour en savoir plus, consultez la documentation sur les notifications sur le bureau.

Les extensions peuvent-elles écouter les clics sur les onglets et les boutons de navigation Chrome ?

Non. Les extensions ne peuvent écouter que les événements décrits dans la documentation de l'API.

Deux extensions peuvent-elles communiquer entre elles ?

Oui, les extensions peuvent transmettre des messages à d'autres extensions. Pour en savoir plus, consultez la documentation sur la transmission de messages.

Les extensions peuvent-elles utiliser Google Analytics ?

Oui. Étant donné que les extensions sont créées de la même manière que les sites Web, elles peuvent suivre l'utilisation à l'aide de Google Analytics. Toutefois, vous devez modifier le code de suivi pour extraire une version HTTPS de la bibliothèque Google Analytics. Pour plus d'informations à ce sujet, consultez ce tutoriel.

Les extensions peuvent-elles modifier les URL chrome:// ?

Non. Les API des extensions ont été conçues pour réduire les problèmes de rétrocompatibilité qui peuvent survenir lorsque de nouvelles versions du navigateur sont déployées. Autoriser les scripts de contenu sur les URL chrome:// signifie que les développeurs commenceront à s'appuyer sur les éléments DOM, CSS et JavaScript de ces pages pour rester identiques. Dans le meilleur des cas, ces pages ne pourront pas être mises à jour aussi rapidement qu'elles le sont en ce moment. Dans le pire des cas, cela peut signifier que la mise à jour de l'une de ces pages peut entraîner le dysfonctionnement d'une extension, empêchant ainsi des parties clés du navigateur de fonctionner pour les utilisateurs de cette extension.

La raison pour laquelle remplacer complètement le contenu hébergé sur ces URL est autorisée, car cela oblige un développeur d'extensions à implémenter toutes les fonctionnalités souhaitées sans dépendre de l'implémentation interne du navigateur.

Les extensions peuvent-elles ouvrir des pop-ups d'action dans le navigateur ou sur une page sans interaction de l'utilisateur ?

Non, les fenêtres pop-up ne peuvent s'ouvrir que si l'utilisateur clique sur la page correspondante ou sur l'action correspondante dans le navigateur. Une extension ne peut pas ouvrir son pop-up par programmation.

Les extensions peuvent-elles maintenir les pop-ups ouverts lorsque l'utilisateur clique ailleurs ?

Non. Les fenêtres pop-up se ferment automatiquement lorsque l'utilisateur sélectionne une partie du navigateur en dehors de celles-ci. Il n'est pas possible de garder la fenêtre pop-up ouverte une fois que l'utilisateur a quitté le site.

Les extensions peuvent-elles être notifiées lors de l'installation ou de la désinstallation ?

Vous pouvez écouter l'événement runtime.onInstalled pour être averti lorsque votre extension est installée ou mise à jour, ou lorsque Chrome est mis à jour. Il n'existe aucun événement correspondant à la désinstallation de votre extension.

Développement

Comment créer une interface utilisateur pour mon extension ?

Les extensions utilisent du code HTML et CSS pour définir leur interface utilisateur. Vous pouvez donc utiliser des commandes de formulaire standards pour créer votre UI, ou appliquer un style à l'interface avec CSS, comme vous le feriez pour une page Web. En outre, les extensions peuvent ajouter certains éléments d'interface utilisateur limités à Chrome.

Quelle quantité de données puis-je stocker dans localStorage ?

Les extensions peuvent stocker jusqu'à 5 Mo de données dans localStorage.

Comment créer un menu d'options pour mon application ?

Vous pouvez laisser les utilisateurs définir des options pour votre extension en créant une page d'options. Il s'agit d'une simple page HTML qui se charge lorsqu'un utilisateur clique sur le bouton "Options" de votre extension. Cette page peut lire et écrire des paramètres sur localStorage, voire envoyer des options à un serveur Web afin qu'elles puissent être conservées d'un navigateur à l'autre.

Quels sont les outils de débogage à la disposition des développeurs d'extensions ?

Les outils de développement intégrés à Chrome permettent de déboguer des extensions, ainsi que des pages Web. Pour en savoir plus, consultez ce tutoriel sur le débogage des extensions.

Pourquoi les correspondances avec caractères génériques ne fonctionnent-elles pas pour les domaines de premier niveau (TLD) ?

Vous ne pouvez pas utiliser de modèles de correspondance avec caractères génériques tels que http://google.*/* pour établir une correspondance avec les domaines de premier niveau (tels que http://google.es et http://google.fr) en raison de la complexité de la restriction effective d'une telle correspondance aux domaines souhaités.

Pour l'exemple de http://google.*/*, les domaines Google sont mis en correspondance, mais il en va de même pour http://google.someotherdomain.com. En outre, de nombreux sites ne possèdent pas tous les TLD de leur domaine. Par exemple, supposons que vous souhaitiez utiliser http://example.*/* pour établir une correspondance avec http://example.com et http://example.es, mais http://example.net est un site hostile. Si votre extension comporte un bug, le site hostile pourrait attaquer votre extension afin d'accéder aux privilèges étendus de votre extension.

Vous devez explicitement énumérer les TLD sur lesquels vous souhaitez exécuter votre extension.

Pourquoi l'API de gestion ne déclenche-t-elle pas d'événements lorsque mon extension est installée/désinstallée ?

L'API de gestion avait pour but de faciliter la création d'extensions de remplacement de page d'onglet. Elle n'était pas destinée à déclencher des événements d'installation ou de désinstallation pour l'extension actuelle.

Comment une extension peut-elle déterminer si elle est diffusée pour la première fois ?

Vous pouvez écouter l'événement runtime.onInstalled. Consultez cette section des questions fréquentes.

Fonctionnalités et bugs

Je pense avoir trouvé un bug ! Comment puis-je m’assurer qu’il est corrigé ?

Lors du développement d'une extension, vous pouvez constater un comportement qui ne correspond pas à la documentation sur les extensions et peut être le résultat d'un bug dans Chrome. La meilleure chose à faire est de vous assurer qu'un rapport de problème approprié est rempli et que l'équipe Chromium dispose de suffisamment d'informations pour reproduire le comportement.

Pour vous en assurer, procédez comme suit:

  1. Concevez une extension de test minimale qui montre le problème que vous souhaitez signaler. Cette extension doit contenir le moins de code possible pour illustrer le bug. En règle générale, il ne doit pas y avoir plus de 100 lignes de code. Souvent, les développeurs constatent qu'ils ne peuvent pas reproduire leurs problèmes de cette manière, ce qui indique que le bug se trouve dans leur propre code.
  2. Effectuez une recherche dans l'outil de suivi des problèmes à l'adresse http://crbug.com pour voir si quelqu'un a signalé un problème similaire. La plupart des problèmes liés aux extensions sont classés sous component=Platform>Extensions. Par conséquent, pour rechercher un bug d'extension lié à la fonction chrome.tabs.executeScript (par exemple), recherchez "component=Platform>Extensions Type=Bug chrome.tabs.executeScript", ce qui vous donne cette liste de résultats.
  3. Si vous trouvez un bug qui décrit votre problème, cliquez sur l'icône en forme d'étoile pour être averti lorsque le bug reçoit une mise à jour. Ne répondez pas au bug en disant "Moi aussi" ou en demandant "Quand ce problème sera-t-il résolu ?". De telles mises à jour peuvent entraîner l'envoi de centaines d'e-mails. N'ajoutez un commentaire que si vous disposez d'informations susceptibles d'être utiles (par exemple, un meilleur scénario de test ou une solution suggérée).
  4. Si vous n'avez trouvé aucun bug approprié à suivre, envoyez un nouveau rapport de problème à l'adresse http://crbug.com/new. Remplissez ce formulaire de manière aussi explicite que possible: choisissez un titre descriptif, expliquez les étapes permettant de reproduire le bug, et décrivez le comportement attendu et réel. Joignez votre exemple de test au rapport et ajoutez des captures d'écran si nécessaire. Plus il est facile pour les autres utilisateurs de reproduire le problème, plus votre bug est susceptible d'être résolu rapidement.
  5. Attendez que le bug soit mis à jour. La plupart des nouveaux bugs sont triés dans un délai d'une semaine, mais la mise à jour peut parfois prendre plus de temps. Ne répondez pas au bug pour demander quand il sera résolu. Si votre bug n'a pas été modifié après deux semaines, veuillez publier un message sur le groupe de discussion en incluant un lien vers votre bug.
  6. Si vous avez initialement signalé votre bug dans le groupe de discussion et que vous avez été redirigé vers cette entrée de FAQ, répondez à votre fil de discussion d'origine en incluant un lien vers le bug que vous avez suivi ou signalé. Les autres utilisateurs rencontrant le même problème pourront ainsi plus facilement trouver le bug approprié.

J'ai une demande de fonctionnalité ! Comment puis-je le signaler ?

Si vous identifiez une fonctionnalité (en particulier si elle est liée à une API expérimentale) qui pourrait être ajoutée pour améliorer l'expérience de développement des extensions, assurez-vous d'envoyer une demande appropriée dans l'outil de suivi des problèmes.

Pour vous en assurer, procédez comme suit:

  1. Effectuez une recherche dans l'outil de suivi des problèmes à l'adresse http://crbug.com pour voir si quelqu'un a demandé une fonctionnalité similaire. La plupart des requêtes liées aux extensions sont classées sous component=Platform>Extensions. Par conséquent, pour rechercher une demande de fonctionnalité d'extension liée aux raccourcis clavier (par exemple), recherchez "component=Platform>Extensions Type=Feature shortcuts", ce qui vous donnera cette liste de résultats.
  2. Si vous trouvez une demande qui correspond à votre demande, cliquez sur l'icône en forme d'étoile pour être averti lorsque le bug reçoit une mise à jour. Ne répondez pas au bug en disant "Moi aussi" ou en demandant "Quand ce changement sera-t-il implémenté ?". De telles mises à jour peuvent entraîner l'envoi de centaines d'e-mails.
  3. Si vous ne trouvez pas de ticket approprié à suivre, envoyez une nouvelle demande à http://crbug.com/new. Soyez aussi précis que possible lorsque vous remplissez ce formulaire: choisissez un titre descriptif et expliquez exactement la fonctionnalité que vous souhaitez et comment vous prévoyez de l'utiliser.
  4. Attendez que le billet soit mis à jour. La plupart des nouvelles requêtes sont triées dans un délai d'une semaine, mais la mise à jour peut parfois prendre plus de temps. Ne répondez pas à la demande pour demander quand la fonctionnalité sera ajoutée. Si votre demande n'a pas été modifiée après deux semaines, veuillez publier un message sur le groupe de discussion en incluant un lien vers votre demande.
  5. Si vous avez initialement signalé votre demande dans le groupe de discussion et que vous avez été dirigé vers cette entrée de la FAQ, répondez à votre fil de discussion d'origine en incluant un lien vers la demande que vous avez ouverte ou ajoutée aux favoris. Les autres utilisateurs ayant la même requête pourront ainsi trouver plus facilement le billet approprié.