如何检测是否安装了Flash,如果未安装,则显示一个隐藏的div来通知用户?


Answers:



159

如果swfobject还不够,或者您需要定制一些内容,请尝试以下操作:

var hasFlash = false;
try {
    hasFlash = Boolean(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'));
} catch(exception) {
    hasFlash = ('undefined' != typeof navigator.mimeTypes['application/x-shockwave-flash']);
}

它适用于7和8。


2
如果您只想检测是否已安装它,而不必以任何一种方式显示swf,则此方法很好用。
ctrlShiftBryan 2010年

10
不得不将其修改为:var hasFlash = false; 尝试{var fo =((navigator.mimeTypes && navigator.mimeTypes ['application / x-shockwave-flash']))吗?navigator.mimeTypes ['application / x-shockwave-flash']。enabledPlugin:0; if(fo)hasFlash = true; } catch(e){if(navigator.mimeTypes ['application / x-shockwave-flash']!=未定义)hasFlash = true; }”
invertedSpear

1
不适用于IE7,因为您没有测试activexobject部件
凯文

1
赞成使用5行JavaScript而不是使用整个库
Alex W14年

这将适用于Firefox和Chrome等Android移动浏览器吗?
Maniprakash Chinnasamy 2014年

105

如果已禁用Flash Flash Player,但安装了Flash Plugin,则@Drewid的答案在我的Firefox 25中不起作用。

@invertedSpear在该答案中的评论适用于Firefox,但不适用于任何IE版本。

因此结合了他们的代码并得到了这个。已在Google Chrome 31,Firefox 25,IE 8-10中测试。谢谢德鲁伊德和倒矛:)

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

1
坚实的答案。Thnx为救生员:)
Gogol 2014年

1
在Firefox 39(2015-08-03)中工作。
Vladimir Vukanac

1
如果允许使用插件,则无法正常工作,但是我们正在检查的网站已明确阻止Flash。Safari 8.0.8。在这种情况下hasFlash仍然为true(应该为false)。
Eugenio'9

非常好。谢谢 !
Koby Douek

1
短暂而甜蜜
Sohail Faruqui

18

您可以使用navigator.mimeTypes。

if (navigator.mimeTypes ["application/x-shockwave-flash"] == undefined)
    $("#someDiv").show ();



2

我使用了最初由justpassinby建议的Adobe的检测工具包。他们的系统很好,因为它可以检测版本号并将其与您的“所需版本”进行比较

一件坏事是它会发出警报,显示检测到的Flash版本,它不是非常用户友好的。突然,一个盒子弹出了一些看似随机的数字。

您可能要考虑的一些修改:

  • 删除警报
  • 对其进行更改,以返回对象(或数组)---第一个元素为boolean true / false,表示“是否在用户计算机上找到了所需的版本” ---第二个元素为在用户计算机上找到的实际版本号

1

http://www.featureblend.com/javascript-flash-detection-library.html的非常精简的版本(仅布尔Flash检测)

var isFlashInstalled = (function(){
var b=new function(){var n=this;n.c=!1;var a="ShockwaveFlash.ShockwaveFlash",r=[{name:a+".7",version:function(n){return e(n)}},{name:a+".6",version:function(n){var a="6,0,21";try{n.AllowScriptAccess="always",a=e(n)}catch(r){}return a}},{name:a,version:function(n){return e(n)}}],e=function(n){var a=-1;try{a=n.GetVariable("$version")}catch(r){}return a},i=function(n){var a=-1;try{a=new ActiveXObject(n)}catch(r){a={activeXError:!0}}return a};n.b=function(){if(navigator.plugins&&navigator.plugins.length>0){var a="application/x-shockwave-flash",e=navigator.mimeTypes;e&&e[a]&&e[a].enabledPlugin&&e[a].enabledPlugin.description&&(n.c=!0)}else if(-1==navigator.appVersion.indexOf("Mac")&&window.execScript)for(var t=-1,c=0;c<r.length&&-1==t;c++){var o=i(r[c].name);o.activeXError||(n.c=!0)}}()};  
return b.c;
    })();

if(isFlashInstalled){
    // Do something with flash
    }else{
    // Don't use flash  
        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.