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?

KingNestor
quelle

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.

Drewid
quelle
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;
  }
}
Vigneshwaran
quelle
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 ();
Albertein
quelle
4

Sie sollten auch in der Lage sein, ..

swfobject.getFlashPlayerVersion().major === 0

mit dem swfobject-Plugin .

user3502163
quelle
swfobjectist nicht definiert.
Mikemaccana
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
Mike
quelle
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  
        }
lucasgabmoreno
quelle