97 votes

Détection de Flash entre navigateurs en Javascript

Est-ce que quelqu'un a un exemple de script qui peut fonctionner de manière fiable sur IE/Firefox pour détecter si le navigateur est capable d'afficher du contenu flash intégré. Je dis de manière fiable car je sais que ce n'est pas possible 100% du temps.

0 votes

Je vois que vous avez déjà accepté la réponse de Joeri, mais vous devriez vraiment considérer sérieusement swfObject. Il est beaucoup plus robuste et moins volumineux.

110voto

Andrew Points 5253

Je suis d'accord avec Max Stewart . SWFObject est la voie à suivre. J'aimerais compléter sa réponse par un exemple de code. Cela devrait vous aider à démarrer :

Assurez-vous que vous avez inclus le swfobject.js (obtenez-le ici ) :

<script type="text/javascript" src="swfobject.js"></script>

Ensuite, utilisez-le comme suit :

if(swfobject.hasFlashPlayerVersion("9.0.115"))
{
    alert("You have the minimum required flash version (or newer)");
}
else
{
    alert("You do not have the minimum required flash version");
}

Remplacez "9.0.115" par la version minimale de Flash dont vous avez besoin. J'ai choisi 9.0.115 comme exemple parce que c'est la version qui a ajouté le support h.264.

Si le visiteur n'a pas flash, il rapportera une version de flash de "0.0.0", donc si vous voulez juste savoir s'il a flash, utilisez :

if(swfobject.hasFlashPlayerVersion("1"))
{
    alert("You have flash!");
}
else
{
    alert("You do not flash :-(");
}

9 votes

Super. J'avais du mal à trouver un exemple vraiment simple pour détecter simplement tout flash installé. Merci.

2 votes

Merci pour cet exemple ! J'avais besoin de lancer un autre javascript si l'utilisateur n'avait pas flash et utilisait déjà swfobject pour l'incorporation de toute façon :)

0 votes

Il y a un problème avec ceci, vous devrez inclure une vérification pour SWFobject ou vous obtiendrez une erreur parce que undefined n'a pas une fonction appelée hasFlashPlayerVersion(). if(SWFobject && SWFobject.hasFlashPlayerVersion("1")) { // code here }

94voto

Max Stewart Points 2875

SWFObject est très fiable. Je l'ai utilisé sans problème pendant un certain temps.

0 votes

Même chose, SWFObject fonctionne très bien pour moi aussi (il s'appelait FlashObject, mais Adobe a fait une crise).

17 votes

Avec jQuery et swfobject, voici le code que j'ai utilisé pour ajouter des noms de classe html de style Modernizr : $('html').addClass(typeof swfobject !== 'undefined' && swfobject.getFlashPlayerVersion().major !== 0 ? 'flash' : 'no-flash');

2 votes

Si quelqu'un est intéressé, je testé certains de ces cas sur jsperf. SWFObject s'est avéré le plus rapide.

36voto

Jon Clark Points 289

Je sais que c'est un vieux message, mais je cherche depuis un moment et je n'ai rien trouvé.
J'ai mis en place le Bibliothèque de détection JavaScript Flash . Il fonctionne très bien et il est documenté pour une utilisation rapide. Cela m'a littéralement pris 2 minutes. Voici le code que j'ai écrit dans l'en-tête :

<script src="Scripts/flash_detect.js"></script>
<script type="text/javascript"> 
 if (!FlashDetect.installed) {
    alert("Flash is required to enjoy this site.");         
 } else {
    alert("Flash is installed on your Web browser.");
 }
</script>

0 votes

Il échoue maintenant sur Chrome et Firefox 6+ !

0 votes

La dernière version fonctionne plutôt bien pour moi. Merci, continuez à faire du bon travail !

0 votes

Merci. J'aime cette bibliothèque car elle ne nécessite pas de swf sentinelle. J'espère que vous la tiendrez à jour !

32voto

stewe Points 14623

Vous pourriez utiliser compilateur de fermeture pour générer une petite détection flash multi-navigateurs :

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print
// @use_closure_library true
// ==/ClosureCompiler==

// ADD YOUR CODE HERE
goog.require('goog.userAgent.flash');
if (goog.userAgent.flash.HAS_FLASH) {
    alert('flash version: '+goog.userAgent.flash.VERSION);
}else{
    alert('no flash found');
}

ce qui donne le code "compilé" suivant :

var a = !1,
    b = "";

function c(d) {
    d = d.match(/[\d]+/g);
    d.length = 3;
    return d.join(".")
}
if (navigator.plugins && navigator.plugins.length) {
    var e = navigator.plugins["Shockwave Flash"];
    e && (a = !0, e.description && (b = c(e.description)));
    navigator.plugins["Shockwave Flash 2.0"] && (a = !0, b = "2.0.0.11")
} else {
    if (navigator.mimeTypes && navigator.mimeTypes.length) {
        var f = navigator.mimeTypes["application/x-shockwave-flash"];
        (a = f && f.enabledPlugin) && (b = c(f.enabledPlugin.description))
    } else {
        try {
            var g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"),
                a = !0,
                b = c(g.GetVariable("$version"))
        } catch (h) {
            try {
                g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), a = !0, b = "6.0.21"
            } catch (i) {
                try {
                    g = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), a = !0, b = c(g.GetVariable("$version"))
                } catch (j) {}
            }
        }
    }
}
var k = b;
a ? alert("flash version: " + k) : alert("no flash found");

3 votes

Cette solution est la plus propre à notre avis. nous cherchions une méthode sans swfobject ni bibliothèque pour détecter si flash est installé. ceci fait l'affaire. merci !

0 votes

Une solution géniale :) vous avez sauvé ma journée.

0 votes

Je ne veux pas me plaindre @anonymous-one, mais cette solution n'utilise-t-elle pas également une bibliothèque (spécifiquement goog.userAgent.flash du Closure Compiler de Google) ? Je veux juste m'assurer que je ne passe pas à côté d'une différence nuancée.

22voto

Tom Roggero Points 2581

Version minimale que j'ai jamais utilisée (ne vérifie pas la version, seulement le plugin Flash) :

var hasFlash = function() {
    return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};

2 votes

Sympa et court, j'aime ça !

0 votes

@greg.kindel Je l'utilise depuis longtemps, et il fonctionne pour les versions que j'ai testées. Cela pourrait être utile cependant, si vous spécifiez la version du système d'exploitation et la version d'IE aussi ;)

0 votes

Ne fonctionne pas dans IE 9.0.17 sous Win 7 avec un message d'erreur : "Automation server can't create object". Cela semble dépendre de l'installation. Sur certains ordinateurs, cela fonctionne, sur d'autres non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X