Une autre méthode consiste à exposer une ressource accessible sur le web mais cela permettra à n'importe quel site web de tester si votre extension est installée.
Supposons que l'ID de votre poste soit aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
et vous ajoutez un fichier (disons, une image de pixels transparents) en tant que test.png
dans les fichiers de votre extension.
Ensuite, vous exposez ce fichier aux pages web avec 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 balise <img>
via XHR, ou de toute autre manière) :
chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/test.png
Si le fichier se charge, alors l'extension est installée. S'il y a une erreur lors du chargement de ce fichier, alors 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);
};
}
A noter : s'il y a une erreur lors du chargement de ce fichier, dit pile réseau L'erreur apparaîtra dans la console sans qu'il soit possible de la faire taire. Lorsque le Chromecast utilisait cette méthode, il a provoqué une certaine controverse à cause de cela ; avec la solution éventuelle très moche de simplement la mise sur liste noire d'erreurs très spécifiques de Dev Tools par l'équipe de Chrome.
Remarque importante : cette méthode ne fonctionnera pas dans les WebExtensions de Firefox. Les ressources accessibles sur le Web exposent intrinsèquement l'extension aux empreintes digitales, puisque l'URL est prévisible en connaissant l'ID. Firefox a décidé de combler cette lacune en attribution d'une URL aléatoire spécifique à une 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é de manière aléatoire pour chaque instance de navigateur et ne correspond pas à l'ID de votre extension. Cela empêche les sites Web de prendre l'empreinte des extensions installées par un utilisateur.
Cependant, bien que l'extension puisse utiliser runtime.getURL()
pour obtenir cette adresse, vous ne pouvez pas la coder en dur dans votre site web.