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

如何使用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。我关心的是如何检测插件已被阻止。

您可以使用像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; } } 

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

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

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

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

  

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

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

  1. 检查是否已安装Flash插件。
  2. 像往常一样初始化闪光灯。
  3. 通过Flash外部接口调用一个函数,该接口旨在告诉您插件是否响应。
  4. 如果它响应,继续正常。
  5. 如果它没有响应,请理想地回退到JavaScript解决方案。

因为这是一个浏览器安全问题,所以您无法直接访问api,它可以告诉您是否阻止了所需的插件。 我认为这可能是目前唯一可用的解决方案。 另请注意,最新版本的chrome(现在为54.0.2840.59)chrome阻止了所有flash,如果它在iframe中运行的话。