web-dev-qa-db-fra.com

Comment puis-je détecter si Flash est installé et si ce n'est pas le cas, afficher une div masquée qui informe l'utilisateur?

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

88
KingNestor

Utilisez swfobject. il remplace une div par le flash s'il est installé. voir: http://code.google.com/p/swfobject/

26
Josh

Si swfobject ne suffira pas, ou si vous avez besoin de 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.

160
Drewid

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

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

Donc, combiné à la fois 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;
  }
}
104
Vigneshwaran

Vous pouvez utiliser navigator.mimeTypes.

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

jqplugin: http://code.google.com/p/jqplugin/

$.browser.flash == true
10
mhenry1384

Vous devriez aussi pouvoir utiliser ..

swfobject.getFlashPlayerVersion().major === 0

avec le swfobject-Plugin .

4
user3502163

J'ai utilisé le kit de détection d'Adobe, proposé à 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 envoie une alerte indiquant la version détectée du flash, qui n’est pas très conviviale. Tout à coup, une boîte apparaît avec des chiffres apparemment aléatoires.

Quelques modifications à prendre en compte:

  • enlever l'alerte
  • changez-le pour qu'il retourne un objet (ou un tableau) --- le premier élément est booléen vrai/faux car "était la version requise 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
2
Mike

Version très très précise de http://www.featureblend.com/javascript-flash-detection-library.html (uniquement la détection flash booléenne)

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  
        }
1
lucasgabmoreno