如何检测是否在使用JavaScript的浏览器中禁用了Flash Player?

如何检测是否在使用JavaScript的浏览器中禁用了Flash Player?,javascript,client,flash,Javascript,Client,Flash,我知道如何检测浏览器中是否安装了Flash player。为此,我使用的hasFlashPlayerVersion()函数。然而,我似乎找不到任何关于如何检测插件是否已安装并被禁用的文档。我在中没有看到检查插件是否已启用的任何文档。您可以在与浏览器javascript通信的不可见swf中进行javascript调用。如果出现超时,则是因为浏览器未安装flash player,或者flash player已被禁用 getURL("javascript:jsfunction();"); 这是我正在

我知道如何检测浏览器中是否安装了Flash player。为此,我使用的hasFlashPlayerVersion()函数。然而,我似乎找不到任何关于如何检测插件是否已安装并被禁用的文档。我在中没有看到检查插件是否已启用的任何文档。

您可以在与浏览器javascript通信的不可见swf中进行javascript调用。如果出现超时,则是因为浏览器未安装flash player,或者flash player已被禁用

getURL("javascript:jsfunction();");

这是我正在使用的一个很好的库:

我认为不可能检测到是否安装了闪存,但禁用了闪存


如果有人禁用了Flash,他们可能不想知道它是被禁用还是根本没有安装。因此,浏览器只是告诉您它“不可用”。

我同意Ape的观点,很久以前,我在一个页面上做过类似的事情,比如说“检测flash player…”,然后等待20秒,然后swf文件将加载并立即将浏览器重定向出页面

如果计时器过期(swf从未加载),它将提示用户安装Flash

可以将该方法与您提到的swfobject hasFlashPlayerVersion()函数相结合。如果他们有闪存,但swf从未加载,那么假设闪存被禁用是相当安全的

getURL("javascript:jsfunction();");
因此,实际上只有3种选择:

  • 没有闪光
  • 闪存:已启用
  • 闪光灯:禁用
在伪代码中,可能如下所示:

var hasFlash = detectFlashPlayerInstalled();
var flashEnabled = false;

/* attempt to load the swf file then wait for some time, then... */

var isDisabled = hasFlash && !flashEnabled;
与javascript函数一起工作,如:

function flashAlive() {
    flashEnabled = true;
}
function detectFlashPlayerInstalled() { 
    //TODO: detect flash in a better way, this will do for now
    return swfobject.hasFlashPlayerVersion(VERSION);
}
从包含以下内容的小型swf文件调用:

getURL("javascript:flashAlive();");

我希望这在某种程度上有所帮助。

这很愚蠢,如果浏览器禁用了flash,它甚至不会加载“不可见的swf”。这将导致javascript代码中出现超时,等待来自不可见的swf的响应。swfobject.hasFlashPlayerVersion(版本)在两种情况下都将返回false:无flash和flash:disabled。所以你无法区分这两种状态。在我的Firefox 3.6.18中,奇怪的是,swfobject.hasFlashPlayerVersion(版本)在安装+启用flash和安装flash时返回相同的结果+disabled@NirO. 这一点也不奇怪,不管是哪种情况,您确实安装了该版本。启用与禁用是一个不同的检测场景,以及这个问题的确切原因。我想不出在网页上隐藏此信息的原因。这个信息之所以重要的一个原因是,它可以用来显示其他内容,例如,我允许使用uploadify在我的站点上载文件,但如果禁用flash,我希望允许html表单上载