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

Is it possible to detect if a plugin is activated or not through JavaScript?

本文关键字:是否 激活 插件 检测 可以通过 JavaScript      更新时间:2023-09-26

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

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

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

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

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

您无法区分已禁用和不存在的插件。请记住,在插件激活/停用生效之前,您可能必须重新启动浏览器。

如果有问题的插件被禁用,它将不会出现在navigator.plugins中,也不会以其他方式暴露在页面中。