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?

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.


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;
  }
}

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 ();



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

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  
        }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.