检测Google Chrome是否阻止Java插件

4

ChromeжҳҜеҗҰж”ҜжҢҒappletе…ғзҙ зҡ„altеұһжҖ§жҲ–еӨҮйҖүHTMLпјҹ - Andrew Thompson
我不知道。我没有使用“applet”标签,而是使用“object”标签将applet嵌入页面中。 - Andrey M.
好的。那么,当你尝试过后发生了什么? - Andrew Thompson
2个回答

1
不仅Chrome使用了点击播放功能——Firefox(Java通过阻止列表实现了点击播放),Opera(他们的Turbo模式使所有插件都能够点击播放)......还有一些附加组件/扩展程序可以防止插件自动运行。但是,这些都不允许您从内容脚本中找出关于插件被点击播放的信息。因此,最好以更一般的方式解决问题。
您可以通过以下方式区分未安装插件(请参见navigator.plugins)和其他情况:
定期测试其可脚本化性或
在插件加载时使插件调用页面脚本
...并基于此假设“加载失败或被阻止”。MDN上有一个最佳实践页面来解决这个问题。
通常这种区分应该足够好,例如,检查SoundCloud如何处理插件被点击播放的情况。

-1

答案已于2013.03.15进行编辑以提高信息准确性

支持的插件列表可作为navigator对象中的数组获得:

navigator.plugins

这个API是非标准的,但是所有现代浏览器都支持它。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');

1
检查 navigator.plugins 只能告诉你插件是否已安装。它仍可能无法加载、被阻止或设置为点击播放,而这些条件无法通过内容可访问的 API 找到。 - Georg Fritzsche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接