Comment puis-je détecter si Flash est installé et si non, afficher un div caché qui informe l'utilisateur?

88

Comment puis-je utiliser javascript / jQuery / etc pour détecter si Flash est installé et si ce n'est pas le cas, afficher un div contenant des informations informant l'utilisateur qu'il doit installer Flash?

KingNestor
la source

Réponses:

159

Si swfobjectcela ne suffit pas, ou si vous devez créer quelque chose d'un peu plus sur mesure, essayez ceci:

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

Cela fonctionne avec 7 et 8.

Drewid
la source
2
cela fonctionne bien si vous voulez juste détecter s'il est installé et pas nécessairement afficher un swf dans un sens ou dans l'autre.
ctrlShiftBryan
10
J'ai dû modifier cela en: var hasFlash = false; try {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']! = non défini) hasFlash = true; } "
invertedSpear
1
cela ne fonctionnera pas sur IE7, car vous ne testez pas la partie activexobject
Kevin
1
vote favorable pour l'utilisation de 5 lignes de JavaScript au lieu d'utiliser une bibliothèque entière
Alex W
Cela fonctionnera pour le navigateur mobile Android comme Firefox et Chrome?
Maniprakash Chinnasamy
105

La réponse de @ Drewid ne fonctionnait pas dans mon Firefox 25 si le plugin flash est juste désactivé mais installé.

Le commentaire de @ invertedSpear dans cette réponse a fonctionné dans Firefox, mais pas dans aucune version d'IE.

Alors combiné leur code et obtenu ceci. Testé dans Google Chrome 31, Firefox 25, IE 8-10. Merci Drewid et 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;
  }
}
Vigneshwaran
la source
1
réponse solide. Thnx for the life saver :)
Gogol
1
Fonctionne dans Firefox 39 (03/08/2015).
Vladimir Vukanac
1
Cela ne fonctionne pas si le plugin est autorisé mais Flash est explicitement bloqué pour le site Web que nous vérifions. Safari 8.0.8. Dans ce cas, hasFlash est toujours vrai (devrait être faux).
Eugenio
Très agréable. Merci !
Koby Douek
1
court et doux
Sohail Faruqui
18

Vous pouvez utiliser navigator.mimeTypes.

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

Vous devriez également pouvoir utiliser ..

swfobject.getFlashPlayerVersion().major === 0

avec le swfobject-Plugin .

user3502163
la source
swfobjectn'est pas défini.
mikemaccana
2

J'ai utilisé le kit de détection d'Adobe, suggéré à l'origine par justpassinby. Leur système est agréable car il détecte le numéro de version et le compare pour vous à votre `` version requise ''

Une mauvaise chose est qu'il fait une alerte indiquant la version détectée de flash, qui n'est pas très conviviale. Tout à coup, une boîte apparaît avec des nombres apparemment aléatoires.

Quelques modifications que vous voudrez peut-être envisager:

  • supprimer l'alerte
  • changez-le pour qu'il renvoie un objet (ou un tableau) --- le premier élément est booléen vrai / faux pour "la version requise a-t-elle été trouvée sur la machine de l'utilisateur" --- le deuxième élément est le numéro de version réel trouvé sur la machine de l'utilisateur
Mike
la source
1

Version très très réduite de http://www.featureblend.com/javascript-flash-detection-library.html (uniquement détection de flash booléen)

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  
        }
lucasgabmoreno
la source