Eine andere Methode besteht darin , eine über das Internet zugängliche Ressource verfügbar zu machen. Auf diese Weise kann jede Website testen, ob Ihre Erweiterung installiert ist.
Angenommen, die ID Ihrer Erweiterung lautet aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
und Sie fügen eine Datei (z. B. ein transparentes Pixelbild) wie test.png
in den Dateien Ihrer Erweiterung hinzu.
Anschließend machen Sie diese Datei mit dem web_accessible_resources
Manifestschlüssel für die Webseiten verfügbar :
"web_accessible_resources": [
"test.png"
],
Auf Ihrer Webseite können Sie versuchen, diese Datei über ihre vollständige URL zu laden (in einem <img>
Tag, über XHR oder auf andere Weise):
chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/test.png
Wenn die Datei geladen wird, wird die Erweiterung installiert. Wenn beim Laden dieser Datei ein Fehler auftritt, wird die Erweiterung nicht installiert.
// 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);
};
}
Hinweis: Wenn beim Laden dieser Datei ein Fehler auftritt , wird der Netzwerkstapelfehler in der Konsole angezeigt, ohne dass eine Stummschaltung möglich ist. Als Chromecast diese Methode verwendete, sorgte dies aus diesem Grund für einige Kontroversen . mit der letztendlich sehr hässlichen Lösung, ganz bestimmte Fehler von Dev Tools vom Chrome-Team einfach auf die schwarze Liste zu setzen .
Wichtiger Hinweis: Diese Methode funktioniert nicht in Firefox WebExtensions. Über das Internet zugängliche Ressourcen setzen die Erweiterung von Natur aus Fingerabdrücken aus, da die URL anhand der ID vorhersehbar ist. Firefox hat beschlossen, diese Lücke zu schließen, indem es webfähigen Ressourcen eine instanzspezifische zufällige URL zuweist :
Die Dateien sind dann unter folgender URL verfügbar:
moz-extension://<random-UUID>/<path/to/resource>
Diese UUID wird zufällig für jede Browserinstanz generiert und ist nicht die ID Ihrer Erweiterung. Dies verhindert, dass Websites die von einem Benutzer installierten Erweiterungen mit einem Fingerabdruck versehen.
Obwohl die Erweiterung runtime.getURL()
zum Abrufen dieser Adresse verwendet werden kann, können Sie sie auf Ihrer Website nicht fest codieren.