如何检查Flash插件是否在Chrome中被阻止

时间:2013-07-18 15:29:51

标签: javascript jquery swfobject

如何使用jquery或javascript检查是否在Chrome中阻止了flash插件?

我们可以使用下面的

检查已禁用的Flash插件
((typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") || (window.ActiveXObject && (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) != false));

在Chrome中,您可以通过单击禁用个别插件来单独禁用插件。然后,如果我们单独禁用插件,则上面的查询工作并返回false。但是如果我们阻止所有插件,它将仅返回true。我关心的是如何检测插件已被阻止。

3 个答案:

答案 0 :(得分:2)

您可以使用类似swfobject的内容来处理闪存检测,但这样的事情也应该有效;

var flashAvailable = false;
try {
  var flash = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
  if(flash) {
    flashAvailable = true;
  }
}
catch(e) {
  if(navigator.mimeTypes ["application/x-shockwave-flash"] != undefined) {
    flashAvailable = true;
  }
}

答案 1 :(得分:0)

我发现唯一可靠的方法是让单个Flash元素提醒浏览器它已启用,即。它没有被阻止。

我在Flash文件的开头使用以下代码执行此操作:

import flash.external.ExternalInterface;
ExternalInterface.call('flashHasLoaded','my-identifier');

然后在浏览器中触发JavaScript函数:

<script type="text/javascript">
    function flashHasLoaded( optionalIdentifier ){
        alert("A flash file has started running");
        if(optionalIdentifier == "specific-thing") alert("Specific thing loaded - do something");
    }
</script>

请记住,只有Flash加载并开始运行后,才会立即触发。

答案 2 :(得分:0)

我能想到检查浏览器是否阻止插件的唯一方法是调用插件并查看它是否返回。在您的情况下,这些步骤:

  1. 检查已安装的Flash插件。
  2. 像往常一样初始化闪光灯。
  3. 通过Flash外部接口调用一个函数,该接口旨在告诉您插件是否正在响应。
  4. 如果有响应,请继续正常进行。
  5. 如果它没有响应,请理想地回到JavaScript解决方案。
  6. 因为它是浏览器安全的东西,所以您无法直接访问api,它可以告诉您所需的插件是否被阻止。我认为这可能是目前唯一可用的解决方案。另请注意,如果在iframe中运行,最新版本的chrome(现在为54.0.2840.59)chrome会阻止所有闪存。