2009-06-15 7 views

risposta

17

È possibile utilizzare navigator.mimeTypes.

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

-1 Non sembra funzionare in IE7. –

158

Se swfobject non sarà sufficiente, oppure è necessario creare qualcosa di più su misura, provate questo:

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

Funziona con 7 e 8.

+2

funziona bene se vuoi solo rilevare se è installato e non necessariamente visualizzare uno swf in entrambi i casi. – ctrlShiftBryan

+10

Doveva essere modificato in: var hasFlash = false; \t \t try { \t \t var fo = (navigator.mimeTypes && navigator.mimeTypes ['application/x-shockwave-flash'])? navigator.mimeTypes ['application/x-shockwave-flash']. enabledPlugin: 0; \t \t if (fo) hasFlash = true; \t \t} catch (e) { \t \t if (navigator.mimeTypes ['application/x-shockwave-flash']! = Undefined) hasFlash = true; \t \t}" – invertedSpear

+1

che non funzionerà su IE7, in quanto non sta testando la parte ActiveXObject – Kevin

2

ho usato il rilevamento di Adobe kit, originariamente suggerito da justpassinby. Il loro sistema è bello perché rileva il numero di versione e lo confronta per te rispetto alla "versione richiesta"

Una cosa negativa è che fa un avviso che mostra la versione rilevata del flash, che non è molto user-friendly. Tutto ad un tratto una scatola si apre con alcuni numeri apparentemente casuali.

Alcune modifiche si potrebbe prendere in considerazione:

  • rimuovere l'avviso
  • modificarlo in modo che restituisce un oggetto (o array) --- primo elemento è booleano true/false per "è stato il versione richiesta trovato nel computer dell'utente" --- secondo elemento è il numero di versione trovato nel computer dell'utente
103

@ La risposta di Drewid non ha funzionato nel mio Firefox 25 se il plug-in Flash è semplicemente disabilitato ma installato.

@ il commento di invertedSpear in quella risposta ha funzionato in firefox ma non in qualsiasi versione di IE.

Quindi combinato il loro codice e ottenuto questo. Testato su Google Chrome 31, Firefox 25, IE 8-10. Grazie Drewid e 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; 
    } 
} 
+2

Questo sembra funzionare perfettamente –

+1

+1 Acclamazione amico, ti ringrazio per aver combinato i due. – Prisoner

+1

risposta solida. Thnx for the life saver :) – Gogol

1

versione molto molto minified di http://www.featureblend.com/javascript-flash-detection-library.html (solo il rilevamento di Flash booleano)

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 
     } 
Problemi correlati