有没有人有一个脚本示例可以在IE / Firefox上可靠地运行,以检测浏览器是否能够显示嵌入式Flash内容。我说得可靠,因为我知道它不可能100%的时间。
答案 0 :(得分:109)
我同意Max Stewart。 SWFObject是要走的路。我想用代码示例来补充他的答案。这应该让你开始:
确保您已包含swfobject.js
文件(获取here):
<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”替换为您需要的最低闪存版本。我选择9.0.115作为示例,因为这是添加h.264支持的版本。
如果访问者没有闪光灯,它会报告闪光版“0.0.0”,所以如果你只想知道他们是否有闪光灯,请使用:
if(swfobject.hasFlashPlayerVersion("1"))
{
alert("You have flash!");
}
else
{
alert("You do not flash :-(");
}
答案 1 :(得分:93)
SWFObject非常可靠。我已经使用它很长一段时间了。
答案 2 :(得分:36)
我知道这是一个老帖子,但我一直在寻找一段时间,但没有找到任何东西 我已经实现了JavaScript Flash Detection Library。 它运作良好,并记录下来以便快速使用。它花了我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>
答案 3 :(得分:32)
您可以使用closure compiler生成小型跨浏览器闪存检测:
// ==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');
}
导致以下&#34;编译&#34;代码:
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");
答案 4 :(得分:21)
我曾经使用的最低版本(不检查版本,只是Flash插件):
var hasFlash = function() {
return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};
答案 5 :(得分:8)
Carl Yestrau的JavaScript Flash Detection Library,在这里:
http://www.featureblend.com/javascript-flash-detection-library.html
......可能就是你要找的东西。
答案 6 :(得分:7)
也许adobe的flash播放器检测套件在这里可能有用吗?
http://www.adobe.com/products/flashplayer/download/detection_kit/
答案 7 :(得分:5)
在Web文档中检测和嵌入Flash是一项非常困难的任务。
我对SWFObject和Adobe解决方案生成的质量和非标准兼容标记感到非常失望。此外,我的测试发现Adobe的自动更新程序不一致且不可靠。
The JavaScript Flash Detection Library (Flash Detect)和JavaScript Flash HTML Generator Library (Flash TML)是一个易读,可维护且符合标准的标记解决方案。
- “卢克读了源!”
答案 8 :(得分:4)
一个班轮isFlashExists
变量的代码:
<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();
答案 9 :(得分:3)
在http://whatsmy.browsersize.com(第14-120行)查看来源。
以下是仅限闪存检测的抽象交叉浏览器code on jsbin, 适用于:FF / IE / Safari / Opera / Chrome。
答案 10 :(得分:3)
怎么样:
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;
};
答案 11 :(得分:3)
如果您对纯Javascript解决方案感兴趣,请从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;
}
答案 12 :(得分:1)
如果您只是想检查是否启用了闪存,这应该就足够了。
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插件,并会触发误报。
答案 13 :(得分:0)
要创建符合标准的Flash对象(但是使用JavaScript),我建议您查看
不引人注目的Flash对象(UFO)
答案 14 :(得分:0)
创建了一个重定向的小.swf
。如果浏览器启用了闪存,它将重定向。
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");
}
}
答案 15 :(得分:0)
我使用Google Closure编译器goog.require('goog.userAgent.flash')库创建了这2个函数。
布尔hasFlash()
返回浏览器是否具有闪光灯。
function hasFlash(){
var b = !1;
function c(a) {if (a = a.match(/[\d]+/g)) {a.length = 3;}}
(function() {
if (navigator.plugins && navigator.plugins.length) {
var a = navigator.plugins["Shockwave Flash"];
if (a && (b = !0, a.description)) {c(a.description);return;}
if (navigator.plugins["Shockwave Flash 2.0"]) {b = !0;return;}
}
if (navigator.mimeTypes && navigator.mimeTypes.length && (a = navigator.mimeTypes["application/x-shockwave-flash"], b = !(!a || !a.enabledPlugin))) {c(a.enabledPlugin.description);return;}
if ("undefined" != typeof ActiveXObject) {
try {
var d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");b = !0;c(d.GetVariable("$version"));return;
} catch (e) {}
try {
d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");b = !0;
return;
} catch (e) {}
try {
d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), b = !0, c(d.GetVariable("$version"));
} catch (e) {}
}
})();
return b;
}
布尔值isFlashVersion(version)
返回Flash版本是否大于提供的版本
function isFlashVersion(version) {
var e = String.prototype.trim ? function(a) {return a.trim()} : function(a) {return /^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};
function f(a, b) {return a < b ? -1 : a > b ? 1 : 0};
var h = !1,l = "";
function m(a) {a = a.match(/[\d]+/g);if (!a) {return ""}a.length = 3;return a.join(".")}
(function() {
if (navigator.plugins && navigator.plugins.length) {
var a = navigator.plugins["Shockwave Flash"];
if (a && (h = !0, a.description)) {l = m(a.description);return}
if (navigator.plugins["Shockwave Flash 2.0"]) {h = !0;l = "2.0.0.11";return}
}
if (navigator.mimeTypes && navigator.mimeTypes.length && (a = navigator.mimeTypes["application/x-shockwave-flash"], h = !(!a || !a.enabledPlugin))) {l = m(a.enabledPlugin.description);return}
if ("undefined" != typeof ActiveXObject) {
try {
var b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");h = !0;l = m(b.GetVariable("$version"));return
} catch (g) {}
try {
b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");h = !0;l = "6.0.21";return
} catch (g) {}
try {
b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), h = !0, l = m(b.GetVariable("$version"))
} catch (g) {}
}
})();
var n = l;
return (function(a) {
var b = 0,g = e(String(n)).split(".");
a = e(String(a)).split(".");
for (var p = Math.max(g.length, a.length), k = 0; 0 == b && k < p; k++) {
var c = g[k] || "",d = a[k] || "";
do {
c = /(\d*)(\D*)(.*)/.exec(c) || ["", "", "", ""];d = /(\d*)(\D*)(.*)/.exec(d) || ["", "", "", ""];
if (0 == c[0].length && 0 == d[0].length) {break}
b = f(0 == c[1].length ? 0 : parseInt(c[1], 10), 0 == d[1].length ? 0 : parseInt(d[1], 10)) || f(0 == c[2].length, 0 == d[2].length) || f(c[2], d[2]);c = c[3];d = d[3]
} while (0 == b);
}
return 0 <= b
})(version)
}