¿Cómo puedo detectar si Flash está instalado y, en caso contrario, mostrar un div oculto que informe al usuario?

StackOverflow https://stackoverflow.com/questions/998245

Pregunta

¿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?

¿Fue útil?

Solución

Uso swfobject. que sustituye un div con el flash si está instalado. ver: http://code.google.com/p/swfobject/

Otros consejos

Si swfobject no será suficiente, o si necesita para crear algo un poco más a medida, intente lo siguiente:

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.

@ respuesta de Drewid no funcionaba en mi Firefox 25 si el plugin flash está desactivado, pero simplemente instalado.

@ comentario de invertedSpear en esa respuesta trabajó en Firefox pero no en cualquier versión de IE.

Así se combina tanto su código y conseguido esto. Probado en Google Chrome 31, Firefox 25, 8-10 IE. 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;
  }
}

Puede utilizar navigator.mimeTypes.

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

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

$.browser.flash == true

También debe ser capaz de utilizar ..

swfobject.getFlashPlayerVersion().major === 0

con el swfobject-Plugin .

Utilicé el kit de detección de Adobe, sugerido originalmente por justpassinby.Su sistema es bueno porque detecta el número de versión y lo compara con su 'versión requerida'.

Lo malo es que genera una alerta que muestra la versión de flash detectada, lo cual no es muy fácil de usar.De repente aparece un cuadro con algunos números aparentemente aleatorios.

Algunas modificaciones que quizás quieras considerar:

  • eliminar la alerta
  • Cambiarlo para que devuelva un objeto (o matriz) --- El primer elemento es booleano verdadero/falso para "fue la versión requerida encontrada en la máquina del usuario" --- El segundo elemento es el número de versión real que se encuentra en la máquina del usuario

Versión muy muy miniaturizada de http://www.featureblend.com/javascript -flash-detección-library.html (sólo la detección de flash boolean)

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  
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top