检测Google Chrome是否阻止Java插件

时间:2011-12-02 11:27:47

标签: javascript google-chrome applet browser-plugin

Google Chrome阻止Java插件,直到您明确允许它运行。 https://www.google.com/support/chrome/bin/answer.py?answer=1247383&hl=en-US

我如何在javascript中检测Chrome是否阻止它?

2 个答案:

答案 0 :(得分:1)

不仅Chrome采用点击播放功能 - Firefox(Java通过阻止列表制作点击播放),Opera(他们的Turbo模式使所有插件点击播放),......还有用于防止插件自动运行的加载项/扩展。

这些都不允许您从内容脚本中找到有关点击播放的插件。理想情况下,您会以更一般的方式解决问题。

您可以通过

来区分未安装的插件(请参阅navigator.plugins)和其他情况
  • 定期测试其可编程性或
  • 在加载时将插件调用到页面脚本中

...并假设“无法加载或被阻止”基于此。 MDN上有一个best-practices page

这种区别通常应该足够好,例如,检查SoundCloud如何处理即点即用的插件。

答案 1 :(得分:-1)

回答编辑2013.03.15以提高信息的准确性

支持的插件列表在navigator对象中以数组形式提供:

navigator.plugins

此API为non-standard,但所有现代浏览器都会实现它。 Internet Explorer支持至少可以追溯到IE7,但它在旧版本的Opera中不可用。

navigator.plugins具有以下基本结构:

PluginArray [
    ...
    Plugin {
        description: "Java Plug-In 2 for NPAPI Browsers"
        filename: "JavaAppletPlugin.plugin"
        length: 17
        name: "Java Plug-In 2 for NPAPI Browsers"
    },
    ...
]

这是一个遍历navigator.plugins的函数,并检查给定字符串的name属性。如果找到,它会返回truefalse

function pluginEnabled(name) {
    var plugins = navigator.plugins,
        i = plugins.length,
        regExp = new RegExp(name, 'i');
    while (i--) {
        if (regExp.test(plugins[i].name)) return true;
    }
    return false;
}

像这样使用它(不区分大小写):

pluginEnabled('java');
pluginEnabled('flash');