it-swarm.com.de

Browserübergreifende Flash-Erkennung in Javascript

Hat jemand ein Beispiel für ein Skript, das in IE/Firefox zuverlässig funktionieren kann, um festzustellen, ob der Browser eingebettete Flash-Inhalte anzeigen kann. Ich sage zuverlässig, weil ich weiß, dass es zu 100% nicht möglich ist. 

94
kd7

SWFObject ist sehr zuverlässig. Ich habe es schon lange ohne Probleme benutzt.

93
Max Stewart

Ich stimme zu Max Stewart . SWFObject ist der Weg zu gehen. Ich möchte seine Antwort um ein Codebeispiel ergänzen. Dies sollte Ihnen den Einstieg erleichtern:

Stellen Sie sicher, dass Sie die swfobject.js-Datei eingefügt haben (erhalten Sie hier ):

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

Dann benutze es wie folgt:

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");
}

Ersetzen Sie "9.0.115" durch die von Ihnen benötigte minimale Flash-Version. Ich habe 9.0.115 als Beispiel gewählt, da dies die Version ist, die die Unterstützung für H.264 hinzugefügt hat.

Wenn der Besucher nicht über Flash verfügt, wird eine Flash-Version von "0.0.0" gemeldet. Wenn Sie also nur wissen möchten, ob Flash überhaupt vorhanden ist, verwenden Sie Folgendes:

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

Ich weiß, das ist ein alter Beitrag, aber ich habe eine Weile gesucht und nichts gefunden.
Ich habe die JavaScript Flash Detection Library ..__ implementiert. Sie funktioniert sehr gut und ist zur schnellen Verwendung dokumentiert. Es dauerte buchstäblich 2 Minuten. Hier ist der Code, den ich in die Kopfzeile geschrieben habe:

<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

Sie können shutter compiler verwenden, um eine kleine Cross-Browser-Flash-Erkennung zu generieren:

// ==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');
}

was zu folgendem "kompilierten" Code führt:

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

Mindestversion, die ich jemals verwendet habe (prüft nicht die Version, nur das Flash-Plugin):

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

Carl Yestrau's JavaScript Flash Detection Library, hier:

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

... ist vielleicht das, wonach Sie suchen.

8
Kent Brewster

Vielleicht könnte das Flash-Player-Erkennungskit von Adobe hier hilfreich sein?

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

7
Joeri Sebrechts

Das Erkennen und Einbetten von Flash in einem Webdokument ist eine überraschend schwierige Aufgabe.

Ich war sehr enttäuscht über die Markierungen, die sowohl mit SWFObject als auch mit Adobe erstellt wurden. Bei meinen Tests fand der automatische Updater von Adobe inkonsistent und unzuverlässig.

Die JavaScript-Flash-Erkennungsbibliothek (Flash Detect) und JavaScript-Flash-HTML-Generatorbibliothek (Flash TML) sind lesbare, wartbare und standardkonforme Markup-Lösungen.

- "Luke las die Quelle!"

5
Carl S Yestrau

Code für eine Liner isFlashExists-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>

Beachten Sie, dass es eine Alternative wie diese gibt: swfobject.getFlashPlayerVersion();

4
trante

Wenn Sie sich für eine reine Javascript-Lösung interessieren, ist hier die, die ich aus Brett kopiere:

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

wie wäre es mit:

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

Die Quelle finden Sie unter http://whatsmy.browsersize.com (Zeilen 14-120).

Hier ist der abstrahierte Crossbrowser code auf jsbin for nur Flasherkennung, funktioniert auf: FF/IE/Safari/Opera/Chrome.

3
Ates Goral

Wenn Sie nur prüfen möchten, ob Flash aktiviert ist, sollte dies ausreichen.

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;

}

Hinweis: Vermeiden Sie die Überprüfung von enabledPlugin . Einige mobile Browser verfügen über ein Flash-Plug-in, das aktiviert werden kann, und lösen ein falsches Negativ aus.

1
bitinn

Mit der Google Closure Compiler-Bibliothek goog.require ('goog.userAgent.flash') habe ich diese 2 Funktionen erstellt.

Boolean hasFlash ()

Gibt zurück, wenn der Browser Flash hat.

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)

Gibt zurück, wenn die Flash-Version größer als die angegebene Version ist

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

Um ein Flash-Objekt zu erstellen, das Standart-kompatibel ist (jedoch mit JavaScript), empfiehlt es sich, einen Blick darauf zu werfen

Unauffällige Flash-Objekte (UFO) 

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

0
nottinhill

Habe einen kleinen .swf erstellt, der umleitet. Wenn der Browser Flash aktiviert ist, wird er umgeleitet.

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