¿Cómo puedo usar javascript / jQuery / etc para detectar si Flash está instalado y si no lo está, mostrar un div que contiene información que informa al usuario que necesita instalar flash?
Respuestas:
Utilice swfobject. reemplaza un div con el flash si está instalado. ver: http://code.google.com/p/swfobject/
Si swfobject
no es suficiente o si necesita crear algo un poco más personalizado, intente esto:
var hasFlash = false;
try {
hasFlash = Boolean(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'));
} catch(exception) {
hasFlash = ('undefined' != typeof navigator.mimeTypes['application/x-shockwave-flash']);
}
Funciona con 7 y 8.
La respuesta de @ Drewid no funcionó en mi Firefox 25 si el complemento flash está deshabilitado pero instalado.
El comentario de @ invertedSpear en esa respuesta funcionó en Firefox pero no en ninguna versión de IE.
Así que combinó ambos códigos y obtuve esto. Probado en Google Chrome 31, Firefox 25, IE 8-10. Gracias Drewid y 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;
}
}
jqplugin: http://code.google.com/p/jqplugin/
$.browser.flash == true
También debería poder utilizar ..
swfobject.getFlashPlayerVersion().major === 0
con el complemento swfobject .
swfobject
es indefinido.
Usé el kit de detección de Adobe, originalmente sugerido por justpassinby. Su sistema es bueno porque detecta el número de versión y lo compara con su 'versión requerida'
Una cosa mala es que genera una alerta que muestra la versión detectada de flash, lo que no es muy fácil de usar. De repente, aparece un cuadro con algunos números aparentemente aleatorios.
Algunas modificaciones que quizás desee considerar:
Versión muy muy reducida de http://www.featureblend.com/javascript-flash-detection-library.html (solo detección de flash booleana)
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
}