在JavaScript中跨浏览器Flash检测

有没有人有一个脚本的例子,可以在IE / Firefox可靠工作,以检测浏览器是否能够显示embedded式Flash内容。 我可靠地说,因为我知道它不可能100%的时间。

SWFObject是非常可靠的。 我已经用了很长一段时间没有麻烦。

我同意Max Stewart 。 SWFObject是要走的路。 我想用一个代码示例来补充他的答案。 这应该让你开始:

确保你已经包含了swfobject.js文件( 在这里获取):

 <script type="text/javascript" src="swfobject.js"></script> 

然后像这样使用它:

 if(swfobject.hasFlashPlayerVersion("9.0.115")) { alert("You have the minimum required flash version (or newer)"); } else { alert("You do not have the minimum required flash version"); } 

将“9.0.115”replace为您需要的最小闪存版本。 我select了9.0.115作为例子,因为那是增加h.264支持的版本。

如果访问者没有Flash,则会报告“0.0.0”的Flash版本,所以如果您只想知道他们是否有Flash,请使用:

 if(swfobject.hasFlashPlayerVersion("1")) { alert("You have flash!"); } else { alert("You do not flash :-("); } 

我知道这是一个旧的post,但我一直在寻找一段时间,没有find任何东西。
我已经实现了JavaScript Flash检测库 。 它工作得很好,它被logging为快速使用。 它从字面上花了我2分钟。 这是我在标题中写的代码:

 <script src="Scripts/flash_detect.js"></script> <script type="text/javascript"> if (!FlashDetect.installed) { alert("Flash is required to enjoy this site."); } else { alert("Flash is installed on your Web browser."); } </script> 

你可以使用闭包编译器来生成一个小的,跨浏览器的闪存检测:

 // ==ClosureCompiler== // @compilation_level ADVANCED_OPTIMIZATIONS // @output_file_name default.js // @formatting pretty_print // @use_closure_library true // ==/ClosureCompiler== // ADD YOUR CODE HERE goog.require('goog.userAgent.flash'); if (goog.userAgent.flash.HAS_FLASH) { alert('flash version: '+goog.userAgent.flash.VERSION); }else{ alert('no flash found'); } 

这会导致下面的“编译”代码:

 var a = !1, b = ""; function c(d) { d = d.match(/[\d]+/g); d.length = 3; return d.join(".") } if (navigator.plugins && navigator.plugins.length) { var e = navigator.plugins["Shockwave Flash"]; e && (a = !0, e.description && (b = c(e.description))); navigator.plugins["Shockwave Flash 2.0"] && (a = !0, b = "2.0.0.11") } else { if (navigator.mimeTypes && navigator.mimeTypes.length) { var f = navigator.mimeTypes["application/x-shockwave-flash"]; (a = f && f.enabledPlugin) && (b = c(f.enabledPlugin.description)) } else { try { var g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"), a = !0, b = c(g.GetVariable("$version")) } catch (h) { try { g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), a = !0, b = "6.0.21" } catch (i) { try { g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), a = !0, b = c(g.GetVariable("$version")) } catch (j) {} } } } } var k = b; a ? alert("flash version: " + k) : alert("no flash found"); 

我用过的最低版本(不检查版本,只是Flash插件):

 var hasFlash = function() { return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"]; }; 

Carl Yestrau的JavaScript Flash检测库,在这里:

http://www.featureblend.com/javascript-flash-detection-library.html

…可能是你在找什么。

也许Adobe的闪存播放器检测工具可能会有帮助吗?

http://www.adobe.com/products/flashplayer/download/detection_kit/

在Web文档中检测和embeddedFlash是一件非常困难的事情。

我对SWFObject和Adobe的解决scheme产生的质量和非标准兼容标记感到非常失望。 另外,我的testing发现Adobe的自动更新程序不一致,不可靠。

JavaScript Flash检测库(Flash检测)和JavaScript Flash HTML生成器库(Flash TML)是易读,可维护且符合标准的标记解决scheme。

– “卢克读源!”

isFlashExists代码是isFlashExistsvariables:

 <script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'> </script> <script type='text/javascript'> var isFlashExists = swfobject.hasFlashPlayerVersion('1') ? true : false ; if (isFlashExists) { alert ('flash exists'); } else { alert ('NO flash'); } </script> 

请注意,有这样的替代: swfobject.getFlashPlayerVersion();

http://whatsmy.browsersize.com查看源代码(14-120行)。;

这里是jsbin上的抽象的跨浏览器代码,仅用于Flash检测 ,适用于:FF / IE / Safari / Opera / Chrome。

关于什么:

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

如果您对纯Javascript的解决scheme感兴趣,请从Brett复制:

 function detectflash(){ if (navigator.plugins != null && navigator.plugins.length > 0){ return navigator.plugins["Shockwave Flash"] && true; } if(~navigator.userAgent.toLowerCase().indexOf("webtv")){ return true; } if(~navigator.appVersion.indexOf("MSIE") && !~navigator.userAgent.indexOf("Opera")){ try{ return new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && true; } catch(e){} } return false; } 

如果你只是想检查是否启用闪光,这应该是足够的。

 function testFlash() { var support = false; //IE only if("ActiveXObject" in window) { try{ support = !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")); }catch(e){ support = false; } //W3C, better support in legacy browser } else { support = !!navigator.mimeTypes['application/x-shockwave-flash']; } return support; } 

注意:避免检查enabledPlugin ,一些手机浏览器有点击启用Flash插件,并会触发假阴性。

要创build一个符合标准的Flash对象(使用JavaScript),我build议你看看

不显眼的Flash对象(UFO)

http://www.bobbyvandersluis.com/ufo/index.html

创build了一个小的.swfredirect。 如果浏览器启用了闪存,它将redirect。

 package com.play48.modules.standalone.util; import flash.net.URLRequest; class Redirect { static function main() { flash.Lib.getURL(new URLRequest("http://play48.com/flash.html"), "_self"); } }