是否可以通过JavaScript检测插件是否被激活?

时间:2011-07-31 12:17:40

标签: javascript plugins detection

这样我通常会检测插件,例如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]);
    }
}

我不是在寻找跨浏览器的解决方案,也不想测试它是否正确。测试此插件是否处于活动状态的方法是什么?

3 个答案:

答案 0 :(得分:6)

其他两个解决方案都可以确定是否安装了插件并启用了。

目前无法确定插件是否已安装但已被禁用。 Navigator.plugins不包含仍安装的已禁用插件。

答案 1 :(得分:1)

navigator.plugins是一个数组,因此您在现代浏览器中使用for each并使用索引进行迭代:

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"));

您无法区分已禁用且不存在的插件。请记住,在插件激活/取消激活生效之前,您可能需要重新启动浏览器。

答案 2 :(得分:0)

如果相关插件已停用,它将不会显示在navigator.plugins中或以其他方式暴露给该页面。