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

3
我知道如何检测浏览器中是否安装了Flash播放器。我使用swfobject的hasFlashPlayerVersion()函数来实现。然而,我似乎找不到任何关于如何检测插件是否已安装但被禁用的文档。在Flash Player Detection Kit中,我也没有看到任何检查插件是否启用的文档。
4个回答

9

我同意Ape的看法,并且曾经在一个页面上做了类似的事情,页面上会显示“正在检测Flash播放器...”,等待20秒钟,期间一个swf文件将加载并立即将浏览器重定向离开该页面。

如果计时器到期(swf未加载),它会提示用户安装Flash。

可以将该方法与您提到的swfobject hasFlashPlayerVersion()函数相结合。如果他们有Flash但swf从未加载,则可以相当确定Flash已被禁用。

因此,实际上只有3个选项:

  • 没有Flash
  • Flash:已启用
  • Flash:已禁用

在伪代码中,它可能如下所示:

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();");

我希望这对你有所帮助。


1
swfobject.hasFlashPlayerVersion(VERSION) 在两种情况下都会返回 false:没有 Flash 和 Flash 已禁用。因此,您无法区分这两种状态。 - frankadelic
在我的Firefox 3.6.18中,很奇怪的是,当Flash被安装+启用和Flash被安装+禁用时,swfobject.hasFlashPlayerVersion(VERSION)返回相同的结果。 - Nir O.
@NirO。这一点并不奇怪,无论哪种情况下,您确实安装了该版本。启用与禁用是一种不同的场景,需要检测,这也是提出此SO问题的确切原因。 - James M. Greene

0
你可以在一个不可见的swf中进行JavaScript调用,与浏览器的JavaScript进行通信。如果超时发生,则是因为浏览器没有安装Flash播放器,或Flash播放器已被禁用。
getURL("javascript:jsfunction();");

1
如果浏览器禁用了Flash,它甚至不会加载“不可见的swf”,这很荒谬。 - Ben Lesh
1
这将导致JavaScript代码中的超时等待来自不可见swf的响应。 - ape

0

0

我认为不可能检测到Flash是否已安装但被禁用。

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


1
我想不出为什么要从网页中隐藏这些信息。这些信息之所以重要,是因为它们可以用来显示替代内容。例如,我允许在我的网站上使用uploadify上传文件,但如果flash被禁用,我希望允许html表单上传。 - Nir O.

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