Bien que cette réponse montre deux façons de créer une barre d'outils dans Chrome, je recommande vivement d'utiliser la fonction action de la page o Action du navigateur badges. Ceux-ci ne prennent pas autant de place que les barres d'outils, et peuvent également être utilisés pour afficher un panneau en cas de clic, et même obtenir les permissions temporaires de l'hôte pour interagir avec la page.
Le site chrome.infobars
API
Cette section utilisé pour montrer une démo en utilisant le chrome.infobars
API. Cette API n'a jamais été versée dans le canal stable, et seront supprimés ; ne l'utilisez pas.
Le site chrome.sidebar
API
Il y a eu une proposition en 2015 pour une API de barre latérale, comme une alternative à la chrome.infobars
(décrite ci-dessus). Mais cette idée a été rejetée en 2016 afin de donner la priorité à " la valeur fondamentale de simplicité de Chrome " ( source ).
Il semble qu'il n'y ait aucun moyen de créer une barre d'outils "avancée" dans Chrome sans la placer dans la fenêtre du document.
Contenu scripts
La création de barres d'outils à l'aide de scripts de contenu est délicate. Il faut insérer du code dans la page, voire modifier la structure du document, ce qui peut casser certaines pages sur internet.
Pour créer une barre d'outils en utilisant le contenu scripts, les étapes suivantes doivent être suivies :
- Exécutez un script de contenu sur la page qui exécute les deux étapes suivantes.
- Insérez la barre d'outils (
<iframe>
- expliqué plus loin).
- Déplacez le contenu de la page.
L'étape 1 est facile, voir mon exemple précédent ou lire la documentation de contenu scripts .
Étape 2 : Insérer la barre d'outils
Pour minimiser les conflits de style, et pour empêcher la page d'utiliser votre barre d'outils, insérez une iframe. Contrairement à la méthode précédente, vous n'avez pas directement accès à l'API de l'extension (car la page intégrée n'est ni un script de contenu, ni une page s'exécutant dans le processus de l'extension).
Insertion de la barre d'outils :
add-toolbar.js
(contenu script)
var height = '40px';
var iframe = document.createElement('iframe');
iframe.src = chrome.runtime.getURL('toolbar.html');
iframe.style.height = height;
iframe.style.width = '100%';
iframe.style.position = 'fixed';
iframe.style.top = '0';
iframe.style.left = '0';
iframe.style.zIndex = '938089'; // Some high value
// Etc. Add your own styles if you want to
document.documentElement.appendChild(iframe);
Créez maintenant un fichier appelé toolbar.html
et l'ajouter à la "web_accessible_resources"
de votre fichier manifeste. Ce fichier sera utilisé à l'emplacement de la barre d'outils, n'hésitez pas à faire n'importe quoi de non-mal avec. Gardez à l'esprit qu'il se comporte comme une page web normale, il n'a littéralement accès à aucune des API de Chrome.
Étape 3 : Déplacement du contenu
Jusqu'à présent, vous avez seulement ajouté un cadre à la page. Il y a un problème : le contenu de la page est partiellement caché. Ce n'est pas très joli. Il y a plusieurs façons de résoudre ce problème, j'ai choisi d'utiliser la méthode suivante Transformations CSS car elle est relativement facile à utiliser et la plupart des pages n'utilisent pas cette propriété sur l'élément body.
// continuing add-toolbar.js
var bodyStyle = document.body.style;
var cssTransform = 'transform' in bodyStyle ? 'transform' : 'webkitTransform';
bodyStyle[cssTransform] = 'translateY(' + height + ')';
translateY
provoque le déplacement du corps vers le bas, y compris les éléments enfants avec position:fixed
. Parce que nous avons ajouté l'iframe à l'élément Root, en dehors de l'élément <body>
l'élément n'est pas affecté.
Je veux utiliser les API d'extension dans la barre d'outils !
Malheureusement, Chrome traite la page html intégrée comme une page d'extension non privilégiée. Vous ne pouvez utiliser que certaines des API de l'extension (comme pour le contenu scripts).
Une autre option consiste à charger une page depuis votre serveur, puis à exécuter un script de contenu sur cette page spécifique. Mettez en place un Cache manifeste pour que votre barre d'outils soit toujours disponible si l'utilisateur n'est pas sur un réseau.