2011-12-02 49 views
4

Google Chrome屏蔽了Java插件,直到您明确允许它运行。 https://www.google.com/support/chrome/bin/answer.py?answer=1247383&hl=en-US检测Google Chrome浏览器是否阻止Java插件

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

+0

Chrome是否尊重'applet'元素的'alt'属性或替代HTML? –

+0

我不知道。我没有使用'applet'标签,我使用'object'标签在页面上嵌入applet。 –

+0

O..K。那么,当你尝试它时发生了什么? –

回答

1

这不仅是Chrome的使用点击即可播放功能 - 火狐(Java的取得通过块列表点击播放),歌剧院(他们的Turbo模式让所有的插件都可以点击播放),还有一些附加组件可以阻止插件自动运行。

这些都不会让你知道插件是从内容脚本中点击播放的。所以理想情况下,您以更一般的方式解决问题。

不能安装插件之间的区别(见navigator.plugins)以及其他情形或者

  • 定期测试它具有插件调用到网页脚本编写脚本或
  • 当它被装载

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

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

-1

答案编辑2013年3月15日,以提高信息的准确性

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

navigator.plugins 

这个API是non-standard,但所有现代浏览器实现它。 IE浏览器的支持至少可以追溯到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找到这些条件。 –