Une autre méthode consiste à exposer une ressource accessible sur le Web , bien que cela permettra à n'importe quel site Web de tester si votre extension est installée.
Supposons que l'ID de votre extension soit aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
, et que vous ajoutez un fichier (par exemple, une image pixel transparente) comme test.png
dans les fichiers de votre extension.
Ensuite, vous exposez ce fichier aux pages Web avec la web_accessible_resources
clé manifeste:
"web_accessible_resources": [
"test.png"
],
Dans votre page Web, vous pouvez essayer de charger ce fichier par son URL complète (dans une <img>
balise, via XHR, ou de toute autre manière):
chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/test.png
Si le fichier se charge, l'extension est installée. S'il y a une erreur lors du chargement de ce fichier, l'extension n'est pas installée.
// Code from https://groups.google.com/a/chromium.org/d/msg/chromium-extensions/8ArcsWMBaM4/2GKwVOZm1qMJ
function detectExtension(extensionId, callback) {
var img;
img = new Image();
img.src = "chrome-extension://" + extensionId + "/test.png";
img.onload = function() {
callback(true);
};
img.onerror = function() {
callback(false);
};
}
À noter: s'il y a une erreur lors du chargement de ce fichier, cette erreur de pile réseau apparaîtra dans la console sans possibilité de la désactiver. Lorsque Chromecast a utilisé cette méthode, cela a suscité beaucoup de controverse à cause de cela; avec l'éventuelle solution très moche de simplement mettre sur liste noire des erreurs très spécifiques des outils de développement par l'équipe Chrome.
Remarque importante: cette méthode ne fonctionnera pas dans Firefox WebExtensions. Les ressources accessibles sur le Web exposent intrinsèquement l'extension à la prise d'empreintes digitales, car l'URL est prévisible en connaissant l'ID. Firefox a décidé de fermer ce trou en attribuant une URL aléatoire spécifique à l'instance aux ressources accessibles sur le Web:
Les fichiers seront alors disponibles en utilisant une URL comme:
moz-extension://<random-UUID>/<path/to/resource>
Cet UUID est généré aléatoirement pour chaque instance de navigateur et n'est pas l'ID de votre extension. Cela empêche les sites Web de prendre des empreintes digitales sur les extensions qu'un utilisateur a installées.
Cependant, bien que l'extension puisse utiliser runtime.getURL()
pour obtenir cette adresse, vous ne pouvez pas la coder en dur sur votre site Web.