【问题标题】:Detect if Google Chrome block Java plug-in检测谷歌浏览器是否阻止 Java 插件
【发布时间】:2011-12-02 11:27:46
【问题描述】:

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

如果 Chrome 阻止它,我如何在 javascript 中检测?

【问题讨论】:

  • Chrome 是否支持applet 元素的alt 属性或替代HTML?
  • 我不知道。我没有使用applet标签,我使用object标签在页面上嵌入小程序。
  • 好吧。那么,当你尝试它时发生了什么?

标签: javascript google-chrome applet browser-plugin


【解决方案1】:

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

这些都不允许您从内容脚本中发现插件是点击播放的。因此,理想情况下,您应该以更一般的方式解决问题。

您可以区分未安装的插件(请参阅navigator.plugins)和其他情况

  • 定期测试它的可脚本性或
  • 在加载页面脚本时将插件调用到页面脚本中

...并据此假设“加载失败或被阻止”。在 MDN 上有一个 best-practices page

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

【讨论】:

    【解决方案2】:

    答案于 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');
    

    【讨论】:

    • 检查navigator.plugins 只会告诉您是否安装了插件。它可能仍然无法加载、被阻止或点击播放,并且这些情况无法通过内容可访问的 API 找到。
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2015-05-30
    • 2018-10-15
    • 2011-06-20
    • 2010-09-05
    相关资源
    最近更新 更多