Hay varías maneras de hacerlo, esta es simplemente una de ellas. Necesitamos saber:
- La ID de la extensión, que es como su DNI que la identifica de forma universal. La instalamos desde https://chromewebstore.google.com/ y luego vamos a Gestionar Extensiones de nuestro Chrome.
- Elegimos la extensión en cuestión en "Gestionar Extensiones" y le damos a "Detalles". En la barra de la URL aparece el ID, por ejemplo: chrome://extensions/?id=pmlcjncilaaaemknfefmegedhcgelmee.
- Visualizamos al manifiesto de la extensión para ver la parte pública de la misma, esto se hace accediendo con la URL: chrome-extension://pmlcjncilaaaemknfefmegedhcgelmee/manifest.json (cambiar la parte en negrita por el ID de tu extensión).
- En el manifiesto, que es una estructura .json localizamos el atributo "web_accessible_resources.resources". Alli se enumeran los recursos de la extensión que son públicos.
- Elegimos uno de esos recursos públicos. Por ejemplo, dado el manifiesto:
Podríamos escoger el recurso icons/icon-16.png. La URL para acceder a él sería: chrome-extension://pmlcjncilaaaemknfefmegedhcgelmee/icons/icon-16.png. Si abrimos esa URL en el navegador debería cargarse dicho icono. Ojo: igual que hemos elegido un .png podríamos haber elegido un .html o un .txt, no importa el tipo de recurso.{ "action": { "chrome_url_overrides": { "newtab": "popup.html" }, "default_title": "__MSG_extName__" }, "background": { "service_worker": "js/background.js" }, "content_scripts": [ { "all_frames": false, "js": [ "js/content.js" ], "match_about_blank": false, "matches": [ "\u003Call_urls>" ], "run_at": "document_start" } ], "default_locale": "en", "description": "__MSG_extShortDesc__", "host_permissions": [ "\u003Call_urls>" ], "icons": { "128": "icons/icon-128.png", "16": "icons/icon-16.png", "300": "icons/icon-300.png", "48": "icons/icon-48.png" }, "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxAT6Z9x4SMUH91sYicM+8qwroIqnrZoMYW4zd+0IX3DGnEtzUX6bNusmBjiwKydV9LvASRM5o12bmc+XuWsYr/G/YwzoKuVfmLHgr8JVfJDwS67XlYKHc1YeSLDI1r7mVrP2nr6W6MBfxRuxWz4QoAZxnaQkw9Dw+SNQksGQq2BIDt12uqSFavzEILGcURMM1+YdILVAEHLSiGVwiLveZfcZzPhS91tJNgawW/nagxxe7iuRE0ea0h+m4I9b3cHCW1oc22nUR9FIliXsslM1F6BZNQDxJoHBJM01+Jq5VDpInXTykeHvL2+v9JRhRrizeLsdRcPBKyIFZDROXQnR+wIDAQAB", "manifest_version": 3, "minimum_chrome_version": "88.0", "name": "__MSG_extName__", "offline_enabled": true, "permissions": [ "storage", "scripting", "alarms" ], "update_url": "https://clients2.google.com/service/update2/crx", "version": "1.0.5", "web_accessible_resources": [ { "matches": [ "\u003Call_urls>" ], "resources": [ "icons/*" ], "use_dynamic_url": false } ] }
- La URL elegida anteriormente será la que usemos para chequear si existe la extensión desde JavaScript. Intentaremos acceder a dicha URL y si obtenemos HTTP 200 OK es que la extensión está instalada y activa, en caso contrario la extensión no está disponible. Es feo, pero funciona.
La función quedaría:
function extensionInstalada() {
var url = 'chrome-extension://pmlcjncilaaaemknfefmegedhcgelmee/icons/icon-16.png';
var hasExtension=null;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
if (xhr.status === 200) {
hasExtension=true;
}
};
xhr.open("GET", url, false);
try {
xhr.send();
} catch (error) {
hasExtension=false;
}
return hasExtension;
}
El código JavasCript que comprobaría la extensión sería:
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if (is_chrome == false) {
alert("Esto solo funciona con Google Chrome");
return;
}
resultado=extensionInstalada();
if (!resultado) {
alert("No tienes instalada la extensión XXX.");
return;
}
Y ya está. No me digan que Google no podría currarselo un poquito para hacerlo más sencillo.