Come posso rilevare se Flash è installato e, in caso contrario, visualizzare un div nascosto che informa l'utente?


88

Come posso utilizzare javascript / jQuery / etc per rilevare se Flash è installato e, in caso contrario, visualizzare un div che contiene informazioni che informano l'utente che deve installare flash?

Risposte:



159

Se swfobjectnon è sufficiente, o hai bisogno di creare qualcosa di un po 'più su misura, prova 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 mostrare un swf in entrambi i casi.
ctrlShiftBryan

10
Ho dovuto modificarlo in: var hasFlash = false; provare {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
non funzionerà su IE7, poiché non stai testando la parte activexobject
Kevin

1
voto positivo per l'utilizzo di 5 righe di JavaScript invece di utilizzare un'intera libreria
Alex W

Funzionerà per browser mobili Android come Firefox e Chrome?
Maniprakash Chinnasamy

105

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

Il commento di @ invertedSpear in quella risposta ha funzionato in Firefox ma non in nessuna versione di IE.

Quindi ha combinato entrambi il loro codice e ottenuto questo. Testato in 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;
  }
}

1
risposta solida. Grazie per il salvavita :)
Gogol

1
Funziona con Firefox 39 (2015-08-03).
Vladimir Vukanac

1
Non funziona se i plugin sono consentiti ma Flash è esplicitamente bloccato per il sito web che stiamo controllando. Safari 8.0.8. In questo caso hasFlash è ancora vero (dovrebbe essere falso).
Eugenio

Molto bella. Grazie !
Koby Douek

1
breve e dolce
Sohail Faruqui

18

Puoi usare navigator.mimeTypes.

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



2

Ho usato il kit di rilevamento di Adobe, originariamente suggerito da justpassinby. Il loro sistema è carino perché rileva il numero di versione e lo confronta per te con la tua "versione richiesta"

Una cosa negativa è che fa un avviso che mostra la versione di flash rilevata, che non è molto facile da usare. All'improvviso viene visualizzata una finestra con alcuni numeri apparentemente casuali.

Alcune modifiche che potresti voler considerare:

  • rimuovere l'avviso
  • cambiarlo in modo che restituisca un oggetto (o un array) --- il primo elemento è booleano vero / falso per "era la versione richiesta trovata sulla macchina dell'utente" --- il secondo elemento è il numero di versione effettivo trovato sulla macchina dell'utente

1

Versione molto molto ridotta di http://www.featureblend.com/javascript-flash-detection-library.html (solo rilevamento 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  
        }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.