web-dev-qa-db-fra.com

Détection Flash de plusieurs navigateurs en Javascript

Quelqu'un a-t-il un exemple de script pouvant fonctionner correctement avec IE/Firefox pour détecter si le navigateur est capable d'afficher du contenu Flash intégré? Je dis de manière fiable parce que je sais que ce n'est pas possible 100% du temps. 

94
kd7

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

93
Max Stewart

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 d’avoir inclus le fichier swfobject.js (récupérez-le ici ):

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

Alors 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 Flash minimale dont vous avez besoin. J'ai choisi 9.0.115 comme exemple car c'est la version qui a ajouté le support h.264.

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

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

Je sais que ceci est un ancien post, mais je cherche depuis un moment et je n'ai rien trouvé.
J'ai implémenté la bibliothèque de détection JavaScript de Flash . Il fonctionne très bien et il est documenté pour une utilisation rapide. Cela m'a pris littéralement 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>        
36
Jon Clark

Vous pouvez utiliser opening compiler pour générer une petite détection flash entre 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");
32
stewe

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

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

La bibliothèque de détection JavaScript de Carl Yestrau, ici:

 http://www.featureblend.com/javascript-flash-detection-library.html

... Peut-être ce que vous cherchez.

8
Kent Brewster

Le kit de détection du lecteur flash d'Adobe pourrait peut-être être utile ici?

http://www.Adobe.com/products/flashplayer/download/detection_kit/

7
Joeri Sebrechts

Détecter et intégrer Flash dans un document Web est une tâche étonnamment difficile.

J'ai été très déçu par la qualité et le balisage non conforme généré par les solutions de SWFObject et d'Adobe. De plus, mes tests ont révélé que le programme de mise à jour automatique d’Adobe était incohérent et peu fiable.

La bibliothèque de détection JavaScript de Flash (Flash Detect) et La bibliothèque de JavaScript Flash HTML Generator (Flash TML) est une solution de balisage lisible, maintenable et conforme aux normes.

- "Luke a lu la source!"

5
Carl S Yestrau

Code pour une ligne isFlashExistsvariable__ variable: 

<script type='text/javascript'
    src='//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js'> </script>

<script type='text/javascript'>
   var isFlashExists = swfobject.hasFlashPlayerVersion('1') ? true : false ;
   if (isFlashExists) {
    alert ('flash exists');
   } else {
    alert ('NO flash');
   }
</script>

Notez qu'il existe une alternative comme celle-ci: swfobject.getFlashPlayerVersion();

4
trante

Si vous êtes intéressé par une solution purement Javascript, voici celle que je copie depuis Brett :

function detectflash(){
    if (navigator.plugins != null && navigator.plugins.length > 0){
        return navigator.plugins["Shockwave Flash"] && true;
    }
    if(~navigator.userAgent.toLowerCase().indexOf("webtv")){
        return true;
    }
    if(~navigator.appVersion.indexOf("MSIE") && !~navigator.userAgent.indexOf("Opera")){
        try{
            return new ActiveXObject("ShockwaveFlash.ShockwaveFlash") && true;
        } catch(e){}
    }
    return false;
}
3
bizi

qu'en est-il de:

var hasFlash = function() {
    var flash = false;
    try{
        if(new ActiveXObject('ShockwaveFlash.ShockwaveFlash')){
            flash=true;
        }
    }catch(e){
        if(navigator.mimeTypes ['application/x-shockwave-flash'] !== undefined){
            flash=true;
        }
    }
    return flash;
};
3
Martin Bommeli

Voir la source sur http://whatsmy.browsersize.com (lignes 14 à 120).

Voici le résumé du navigateur en croix code sur jsbin pour détection flash seulement, fonctionne sur: FF/IE/Safari/Opera/Chrome.

3
Ates Goral

Si vous voulez juste vérifier si le flash est activé, cela devrait suffire.

function testFlash() {

    var support = false;

    //IE only
    if("ActiveXObject" in window) {

        try{
            support = !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"));
        }catch(e){
            support = false;
        }

    //W3C, better support in legacy browser
    } else {

        support = !!navigator.mimeTypes['application/x-shockwave-flash'];

    }

    return support;

}

Remarque: évitez de cocher enabledPlugin , certains navigateurs mobiles ont un plug-in pour activer le plug-in flash et déclenchent un faux négatif.

1
bitinn

En utilisant la bibliothèque goog.require ('goog.userAgent.flash') du compilateur Google Closure, j'ai créé ces 2 fonctions.

boolean hasFlash ()

Retourne si le navigateur a flash.

function hasFlash(){
    var b = !1;
    function c(a) {if (a = a.match(/[\d]+/g)) {a.length = 3;}}
    (function() {
    if (navigator.plugins && navigator.plugins.length) {
        var a = navigator.plugins["Shockwave Flash"];
        if (a && (b = !0, a.description)) {c(a.description);return;}
        if (navigator.plugins["Shockwave Flash 2.0"]) {b = !0;return;}
    }
    if (navigator.mimeTypes && navigator.mimeTypes.length && (a = navigator.mimeTypes["application/x-shockwave-flash"], b = !(!a || !a.enabledPlugin))) {c(a.enabledPlugin.description);return;}
    if ("undefined" != typeof ActiveXObject) {
        try {
            var d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");b = !0;c(d.GetVariable("$version"));return;
        } catch (e) {}
        try {
            d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");b = !0;
            return;
        } catch (e) {}
        try {
            d = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), b = !0, c(d.GetVariable("$version"));
        } catch (e) {}
    }
    })();
    return b;
}

boolean isFlashVersion (version)

Renvoie si la version flash est supérieure à la version fournie.

function isFlashVersion(version) {
    var e = String.prototype.trim ? function(a) {return a.trim()} : function(a) {return /^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};
    function f(a, b) {return a < b ? -1 : a > b ? 1 : 0};
    var h = !1,l = "";
    function m(a) {a = a.match(/[\d]+/g);if (!a) {return ""}a.length = 3;return a.join(".")}
    (function() {
        if (navigator.plugins && navigator.plugins.length) {
            var a = navigator.plugins["Shockwave Flash"];
            if (a && (h = !0, a.description)) {l = m(a.description);return}
            if (navigator.plugins["Shockwave Flash 2.0"]) {h = !0;l = "2.0.0.11";return}
        }
        if (navigator.mimeTypes && navigator.mimeTypes.length && (a = navigator.mimeTypes["application/x-shockwave-flash"], h = !(!a || !a.enabledPlugin))) {l = m(a.enabledPlugin.description);return}
        if ("undefined" != typeof ActiveXObject) {
            try {
                var b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");h = !0;l = m(b.GetVariable("$version"));return
            } catch (g) {}
            try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");h = !0;l = "6.0.21";return
            } catch (g) {}
            try {
                b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"), h = !0, l = m(b.GetVariable("$version"))
            } catch (g) {}
        }
    })();
    var n = l;
    return (function(a) {
        var b = 0,g = e(String(n)).split(".");
        a = e(String(a)).split(".");
        for (var p = Math.max(g.length, a.length), k = 0; 0 == b && k < p; k++) {
            var c = g[k] || "",d = a[k] || "";
            do {
                c = /(\d*)(\D*)(.*)/.exec(c) || ["", "", "", ""];d = /(\d*)(\D*)(.*)/.exec(d) || ["", "", "", ""];
                if (0 == c[0].length && 0 == d[0].length) {break}
                b = f(0 == c[1].length ? 0 : parseInt(c[1], 10), 0 == d[1].length ? 0 : parseInt(d[1], 10)) || f(0 == c[2].length, 0 == d[2].length) || f(c[2], d[2]);c = c[3];d = d[3]
            } while (0 == b);
        }
        return 0 <= b
    })(version)
}
0
rturkek

Pour créer un objet Flash conforme à standart (avec JavaScript cependant), je vous recommande de consulter

Objets flash discrets (UFO) 

http://www.bobbyvandersluis.com/ufo/index.html

0
nottinhill

Ont créé un petit .swf qui redirige. Si le navigateur est activé flash, il sera redirigé.

package com.play48.modules.standalone.util;

import flash.net.URLRequest;


class Redirect {


static function main() {

    flash.Lib.getURL(new URLRequest("http://play48.com/flash.html"), "_self");

}

}
0
mike