9

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

4

3 回答 3

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;
  }
}
于 2013-07-18T16:00:38.580 回答
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 加载并开始运行后才会触发。

于 2015-10-22T15:02:46.713 回答
0

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

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

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

于 2016-10-19T16:59:30.657 回答