Wie kann ich feststellen, ob Flash installiert ist, und wenn nicht, ein verstecktes Div anzeigen, das den Benutzer informiert?


88

Wie kann ich mithilfe von Javascript / jQuery / etc feststellen, ob Flash installiert ist, und wenn dies nicht der Fall ist, ein Div anzeigen, das Informationen enthält, die den Benutzer darüber informieren, dass er Flash installieren muss?

Antworten:



159

Wenn dies swfobjectnicht ausreicht oder Sie etwas maßgeschneiderteres erstellen müssen, versuchen Sie Folgendes:

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

Es funktioniert mit 7 und 8.


2
Dies funktioniert gut, wenn Sie nur erkennen möchten, ob es installiert ist, und nicht unbedingt einen SWF anzeigen müssen.
ctrlShiftBryan

10
Musste dies ändern zu: var hasFlash = false; try {var fo = (navigator.mimeTypes && navigator.mimeTypes ['application / x-schockwave-flash'])? navigator.mimeTypes ['application / x-schockwave-flash']. enabledPlugin: 0; if (fo) hasFlash = true; } catch (e) {if (navigator.mimeTypes ['application / x-schockwave-flash']! = undefined) hasFlash = true; } "
invertedSpear

1
das wird auf IE7 nicht funktionieren, da Sie den activexobject-Teil nicht testen
Kevin

1
Upvote für die Verwendung von 5 Zeilen JavaScript anstelle einer gesamten Bibliothek
Alex W

Dies wird für Android Mobile Browser wie Firefox und Chrome funktionieren?
Maniprakash Chinnasamy

105

@ Drewids Antwort hat in meinem Firefox 25 nicht funktioniert, wenn das Flash-Plugin nur deaktiviert, aber installiert ist.

Der Kommentar von @ invertedSpear in dieser Antwort funktionierte in Firefox, aber in keiner IE-Version.

Also kombinierte beide ihren Code und bekam diesen. Getestet in Google Chrome 31, Firefox 25, IE 8-10. Danke Drewid und 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
solide Antwort. Danke für den Lebensretter :)
Gogol

1
Funktioniert in Firefox 39 (03.08.2015).
Vladimir Vukanac

1
Es funktioniert nicht, wenn Plugins erlaubt sind, aber Flash ist für die Website, die wir überprüfen, explizit blockiert. Safari 8.0.8. In diesem Fall ist hasFlash immer noch wahr (sollte falsch sein).
Eugenio

Sehr schön. Vielen Dank !
Koby Douek

1
kurz und
bündig

18

Sie können navigator.mimeTypes verwenden.

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



2

Ich habe das Erkennungskit von Adobe verwendet, das ursprünglich von justpassinby vorgeschlagen wurde. Ihr System ist nett, weil es die Versionsnummer erkennt und sie für Sie mit Ihrer 'erforderlichen Version' vergleicht.

Eine schlechte Sache ist, dass es eine Warnung ausgibt, die die erkannte Version von Flash anzeigt, was nicht sehr benutzerfreundlich ist. Plötzlich erscheint eine Box mit scheinbar zufälligen Zahlen.

Einige Änderungen, die Sie möglicherweise berücksichtigen möchten:

  • Entfernen Sie die Warnung
  • Ändern Sie es so, dass es ein Objekt (oder Array) zurückgibt. --- Das erste Element ist boolesch wahr / falsch für "Wurde die erforderliche Version auf dem Computer des Benutzers gefunden?" --- Das zweite Element ist die tatsächliche Versionsnummer, die auf dem Computer des Benutzers gefunden wurde

1

Sehr sehr minimierte Version von http://www.featureblend.com/javascript-flash-detection-library.html (nur boolesche Blitzerkennung )

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  
        }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.