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

Posted

技术标签:

【中文标题】如何检查 Flash 插件在 Chrome 中是不是被阻止【英文标题】:how to check flash plugin is blocked in Chrome如何检查 Flash 插件在 Chrome 中是否被阻止 【发布时间】:2013-07-17 15:46:54 【问题描述】:

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

我们可以使用以下方法检查禁用的 Flash 插件

((typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") || (window.ActiveXObject && (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) != false));

在 Chrome 中,您可以通过单击禁用单个插件来单独禁用插件。然后,如果我们单独禁用插件,上述查询将起作用并返回 false。但是如果我们阻止所有插件,它只会返回true。因此我关心的是如何检测插件是否被阻止。

【问题讨论】:

你的东西有问题吗?这是一个问题,还是您试图回答自己? 检测 Flash 插件是否被禁用或阻止有什么区别?我猜你最终会得到相同的结果 - 没有 flash 插件。 在 Chrome 中,您可以通过单击禁用单个插件来单独禁用插件。然后,如果我们单独禁用插件,上述查询将起作用并返回 false。但是如果我们阻止所有插件,它只会返回true。因此我关心的是如何检测插件已被阻止。 这个问题有什么可能的解决方案吗? 这里有一些提示:developer.mozilla.org/en-US/Add-ons/Plugins/… 【参考方案1】:

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

【讨论】:

在 Chrome 中,您可以通过单击禁用单个插件来单独禁用插件。然后,如果我们单独禁用插件,上述查询将起作用并返回 false。但是如果我们阻止所有插件,它只会返回true。因此我关心的是如何检测插件已被阻止。因此上述不是预期的答案。【参考方案2】:

我发现唯一可靠的方法是让单个 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 加载并开始运行后才会触发。

【讨论】:

【参考方案3】:

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

    检查 flash 插件是否安装。 照常初始化您的 Flash swf。 通过 Flash 外部接口调用一个函数,该接口旨在告诉您插件是否响应。 如果有响应,则照常进行。 如果它没有响应,最好退回到 javascript 解决方案。

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

【讨论】:

以上是关于如何检查 Flash 插件在 Chrome 中是不是被阻止的主要内容,如果未能解决你的问题,请参考以下文章

如何启用被禁用的Chrome第三方插件

chrome不支持flash 插件怎么办,有解决的办法吗?

如何在安卓手机上使用Chrome插件

检测 FLASH 插件崩溃

ubuntu16.04下chrome安装flash插件

解决Linux下chrome无法播放flash问题