답변:
SWFObject 는 매우 안정적입니다. 나는 꽤 오랫동안 문제없이 그것을 사용했습니다.
$('html').addClass(typeof swfobject !== 'undefined' && swfobject.getFlashPlayerVersion().major !== 0 ? 'flash' : 'no-flash');
if( swfobject.hasFlashPlayerVersion("8.0") ) { }
플래시가 설치되어 있지 않으면 false 를 던지는 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"를 필요한 최소 플래시 버전으로 바꿉니다. 저는 9.0.115를 예로 선택했습니다. 264 지원을 추가 한 버전이기 때문입니다.
방문자에게 플래시가없는 경우 "0.0.0"의 플래시 버전을보고하므로 플래시가 전혀 없는지 알고 싶다면 다음을 사용하세요.
if(swfobject.hasFlashPlayerVersion("1"))
{
alert("You have flash!");
}
else
{
alert("You do not flash :-(");
}
if(SWFobject && SWFobject.hasFlashPlayerVersion("1")) { // code here }
나는 이것이 오래된 게시물이라는 것을 알고 있지만 한동안 찾고 있었지만 아무것도 찾지 못했습니다. 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>
클로저 컴파일러 를 사용하여 작은 브라우저 간 플래시 감지를 생성 할 수 있습니다 .
// ==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");
goog.userAgent.flash
Google의 Closure Compiler) 도 사용하지 않습니까? 나는 여기서 약간의 미묘한 차이를 놓치고 있지 않은지 확인하고 싶습니다.
내가 사용한 최소 버전 (버전을 확인하지 않고 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 Detection Library는 다음과 같습니다.
http://www.featureblend.com/javascript-flash-detection-library.html
... 당신이 찾고있는 것일 수 있습니다.
어도비의 플래시 플레이어 감지 키트가 여기에 도움이 될 수 있습니까?
http://www.adobe.com/products/flashplayer/download/detection_kit/
웹 문서 내에서 Flash를 감지하고 포함하는 것은 놀랍도록 어려운 작업입니다.
저는 SWFObject와 Adobe의 솔루션 모두에서 생성 된 품질 및 비표준 준수 마크 업에 매우 실망했습니다. 또한 테스트 결과 Adobe의 자동 업데이트 프로그램이 일관성이없고 신뢰할 수없는 것으로 나타났습니다.
JavaScript Flash Detection Library (Flash Detect) 및 JavaScript Flash HTML Generator Library (Flash TML) 는 읽기 쉽고 유지 관리가 가능하며 표준을 준수하는 마크 업 솔루션입니다.
- "루크가 소스를 읽어라!"
하나의 라이너 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();
http://whatsmy.browsersize.com (14-120 행) 에서 소스를 확인 하십시오 .
여기에 추상화 된 크로스 브라우저입니다 jsbin에 코드 에 대한 전용 플래시 감지 , 작동 : FF / IE / 사파리 / 오페라 / 크롬.
detectObject()
IE 의 대응 물도 포함 됩니다.
순수한 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;
}
플래시가 활성화되어 있는지 확인하고 싶다면 이것으로 충분합니다.
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을 선택 하지 마십시오 . 일부 모바일 브라우저에는 탭하여 사용 가능한 플래시 플러그인이 있으며 거짓 음성을 트리거합니다.
JavaScript를 사용하여 표준과 호환되는 Flash 개체를 만들려면 다음을 살펴 보는 것이 좋습니다.
눈에 잘 띄지 않는 플래시 개체 (UFO)
Google Closure 컴파일러 goog.require ( 'goog.userAgent.flash') 라이브러리를 사용하여이 두 함수를 만들었습니다.
부울 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 (버전)
플래시 버전이 제공된 버전보다 큰 경우 반환
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)
}