Comprueba si el usuario tiene una extensión de Chrome de terceros instalada

Actualmente estoy tratando de detectar si un usuario tiene una cierta extensión de Chrome instalada. La extensión de Chrome no es mía y no tengo el código fuente para ella. He intentado métodos en numerosas publicaciones, pero todas fallan. Lo que he intentado y por qué falló se detalla a continuación.

Esto da como resultado ‘no se puede leer la propiedad connect of undefined’ cuando se ejecuta:

var myPort=chrome.extension.connect('idldbjenlmipmpigmfamdlfifkkeaplc', some_object_to_send_on_connect); 

Intentando cargar un recurso de la extensión de la siguiente manera para probar si está allí pero yendo a esta URL en el navegador aparece ‘tu archivo no se encontró’ Página de error de Chrome (ten en cuenta que encontré esta ruta yendo a C: \ Users \\ AppData \ Local \ Google \ Chrome \ User Data \ Default \ Extensions \ idldbjenlmipmpigmfamdlfifkkeaplc \ 1.0.0.1_0 \ en mi máquina local de Windows):

 chrome-extension://idldbjenlmipmpigmfamdlfifkkeaplc/1.0.0.1_0/icon_16.png 

Usar la administración de Chrome, pero esto da como resultado el error de la consola ‘no se puede leer la propiedad get de indefinido’ cuando se ejecuta

 chrome.management.get("idldbjenlmipmpigmfamdlfifkkeaplc", function(a){console.log(a);}); 

Y la mayoría de las otras respuestas que he encontrado parecen involucrar la extensión escrita por la misma persona que está tratando de verificarla.

Suponiendo que lo necesita de un sitio web

connect método de connect / message implica que la extensión enumera específicamente su sitio web en la lista de orígenes desde los que espera conexión. Esto es poco probable a menos que usted mismo haya escrito esta extensión, ya que no puede ser un dominio comodín.

Hacer referencia a los archivos dentro de la extensión desde el contexto web devolver 404 simule un error de red a menos que la extensión los declare como accesibles a través de la web . Esto solía funcionar antes de 2012, pero Google lo cerró como un método de huellas dactilares: ahora las extensiones tienen que enumerar explícitamente los recursos a los que se puede acceder. La extensión que menciona específicamente no incluye ningún archivo como accesible a través de la web, por lo que esta ruta también se cierra.

chrome.management es una API de extensión; los sitios web no pueden usarlo en absoluto.

Por último, si una extensión tiene un script de contenido que de alguna manera modifica el DOM de su página web, puede detectar esos cambios. Pero no es muy confiable, ya que las secuencias de comandos de contenido pueden cambiar su lógica. De nuevo, en su caso específico, la extensión escucha un evento DOM, pero no deja claro de ninguna manera que se recibió el evento, por lo que esta ruta se cierra.

Tenga en cuenta que, en general, no puede determinar que el código del script de contenido se ejecute junto con el suyo, ya que se ejecuta en un contexto aislado .

En general, no hay una solución mágica para ese problema. La extensión tiene que cooperar para ser detectable, y no se puede omitir.

Suponiendo que lo necesita de otra extensión

Orígenes incluidos en la lista blanca para el método de connect / message predeterminado para todas las extensiones; sin embargo, para que esto funcione, la extensión de destino debe escuchar el evento onConnectExternal o onMessageExternal , que no es común.

Los recursos accesibles a través de la web tienen las mismas restricciones para acceder desde otras extensiones, por lo que la situación no es mejor.

Es posible que observe una página de cambios con su propia secuencia de comandos de contenido, pero de nuevo puede que no haya datos observables y no puede confiar en que esos cambios sean siempre los mismos.

De forma similar a la interacción entre extensión y página web, los scripts de contenido de diferentes extensiones se ejecutan en un contexto aislado, por lo que no es posible “capturar” directamente el código que se está ejecutando.

chrome.management API chrome.management de una extensión es la única forma segura de detectar una extensión de terceros instalada, pero ten en cuenta que requiere "management" permiso de "management" con sus temibles advertencias.