De esta manera, normalmente detectaría complementos, como Flash Player:

for (var el in navigator.plugins) {
    if (navigator.plugins[el].name &&
        navigator.plugins[el].name.toLowerCase().indexOf('shockwave') !== -1) {
        console.log(navigator.plugins[el]);
    }
}

No estoy buscando una solución de navegador cruzado o quiero probar si es la forma correcta o no. ¿Cuál es la forma de probar si este complemento está activo o no?

3
orustam 31 jul. 2011 a las 16:17

3 respuestas

La mejor respuesta

Las otras dos soluciones funcionan para averiguar si un complemento está instalado Y está habilitado.

Actualmente no hay forma de averiguar si el complemento está instalado pero está deshabilitado. Navigator.plugins no contiene complementos deshabilitados que todavía están instalados.

6
Scott 27 abr. 2015 a las 18:55

Si el complemento en cuestión está deshabilitado, no aparecerá en navigator.plugins ni estará expuesto a la página.

0
Delan Azabani 31 jul. 2011 a las 12:23

navigator.plugins es una matriz, por lo que usaría for each en los navegadores modernos e iteraría con un índice de lo contrario:

function pluginActive(pname) {
    for (var i = 0;i < navigator.plugins.length;i++) {
        if (navigator.plugins[i].name.indexOf(pname) != -1) {
            return true;
        }
    }
    return false;
}

console.log("Flash plugin " +
            (pluginsActive("Shockwave Flash") ? "active" : "not present"));

No puede distinguir los complementos que están deshabilitados y no están presentes. Tenga en cuenta que es posible que deba reiniciar su navegador antes de que la activación / desactivación del complemento surta efecto.

1
phihag 31 jul. 2011 a las 14:08