Flash가 설치되어 있는지 감지하고 그렇지 않은 경우 사용자에게 알리는 숨겨진 div를 표시하려면 어떻게해야합니까?


88

javascript / jQuery / etc를 사용하여 Flash가 설치되었는지 감지하고 설치되어 있지 않은 경우 사용자에게 Flash를 설치해야 함을 알리는 정보가 포함 된 div를 표시하려면 어떻게해야합니까?

답변:



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']! = undefined) hasFlash = true; } "
invertedSpear

1
Activexobject 부분을 테스트하지 않기 때문에 IE7에서는 작동하지 않습니다
Kevin

1
전체 라이브러리를 사용하는 대신 JavaScript 5 줄을 사용하도록
Alex W

이것은 firefox 및 chrome과 같은 Android 모바일 브라우저에서 작동합니까?
Maniprakash Chinnasamy

104

@Drewid의 대답은 플래시 플러그인이 비활성화되었지만 설치된 경우 Firefox 25에서 작동하지 않았습니다.

해당 답변의 @invertedSpear의 의견은 firefox에서 작동했지만 IE 버전에서는 작동하지 않았습니다.

그래서 그들의 코드를 결합하여 이것을 얻었습니다. Google Chrome 31, Firefox 25, IE 8-10에서 테스트되었습니다. 감사합니다 Drewid 및 invertedSpear :)

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 :
고골

1
Firefox 39 (2015-08-03)에서 작동합니다.
Vladimir Vukanac

1
플러그인이 허용되면 작동하지 않지만 확인중인 웹 사이트에 대해 Flash가 명시 적으로 차단됩니다. Safari 8.0.8. 이 경우 hasFlash는 여전히 true입니다 (false 여야 함).
Eugenio

아주 좋아. 감사 !
Koby Douek

1
짧고 달콤한
Sohail Faruqui

18

navigator.mimeTypes를 사용할 수 있습니다.

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



2

원래 justpassinby가 제안한 Adobe의 감지 키트를 사용했습니다. 그들의 시스템은 버전 번호를 감지하고 '필수 버전'과 비교하기 때문에 좋습니다.

한 가지 나쁜 점은 감지 된 플래시 버전을 보여주는 경고를하는 것인데, 이는 사용자 친화적이지 않습니다. 갑자기 임의의 숫자가있는 상자가 나타납니다.

고려할 수있는 몇 가지 수정 사항 :

  • 경고 제거
  • 객체 (또는 배열)를 반환하도록 변경합니다. --- 첫 번째 요소는 "사용자의 컴퓨터에서 필요한 버전을 찾았습니까?"에 대한 부울 true / false입니다. --- 두 번째 요소는 사용자의 컴퓨터에서 찾은 실제 버전 번호입니다.

1

http://www.featureblend.com/javascript-flash-detection-library.html의 매우 축소 된 버전 (부울 플래시 감지 만 해당)

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  
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.