Hat jemand ein Beispiel für ein Skript, das in IE / Firefox zuverlässig funktioniert, um festzustellen, ob der Browser eingebettete Flash-Inhalte anzeigen kann? Ich sage zuverlässig, weil ich weiß, dass es nicht 100% der Zeit möglich ist.
Hat jemand ein Beispiel für ein Skript, das in IE / Firefox zuverlässig funktioniert, um festzustellen, ob der Browser eingebettete Flash-Inhalte anzeigen kann? Ich sage zuverlässig, weil ich weiß, dass es nicht 100% der Zeit möglich ist.
Antworten:
SWFObject ist sehr zuverlässig. Ich habe es eine ganze Weile ohne Probleme benutzt.
$('html').addClass(typeof swfobject !== 'undefined' && swfobject.getFlashPlayerVersion().major !== 0 ? 'flash' : 'no-flash');
if( swfobject.hasFlashPlayerVersion("8.0") ) { }
Throws false nach Flash, wenn kein Flash installiert ist. Die Nummer ist die erforderliche Mindestversion des Flash Players.
Ich stimme Max Stewart zu . SWFObject ist der richtige Weg. Ich möchte seine Antwort mit einem Codebeispiel ergänzen. Dies sollte Ihnen den Einstieg erleichtern:
Stellen Sie sicher, dass Sie die swfobject.js
Datei aufgenommen haben ( hier herunterladen ):
<script type="text/javascript" src="swfobject.js"></script>
Dann benutze es so:
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 erforderliche Mindest-Flash-Version. Ich habe 9.0.115 als Beispiel gewählt, weil dies die Version ist, die h.264-Unterstützung hinzugefügt hat.
Wenn der Besucher keinen Flash hat, wird eine Flash-Version von "0.0.0" gemeldet. Wenn Sie also nur wissen möchten, ob er überhaupt Flash hat, verwenden Sie:
if(swfobject.hasFlashPlayerVersion("1"))
{
alert("You have flash!");
}
else
{
alert("You do not flash :-(");
}
if(SWFobject && SWFobject.hasFlashPlayerVersion("1")) { // code here }
Ich weiß, dass dies ein alter Beitrag ist, aber ich habe eine Weile gesucht und nichts gefunden.
Ich habe die JavaScript Flash Detection Library implementiert . Es funktioniert sehr gut und ist für den schnellen Gebrauch dokumentiert. Es hat buchstäblich 2 Minuten gedauert. Hier ist der Code, den ich in den Header 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>
Sie können den Closure-Compiler verwenden , um eine kleine browserübergreifende 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");
goog.userAgent.flash
von Googles Closure Compiler)? Ich möchte nur sicherstellen, dass mir hier kein nuancierter Unterschied entgeht.
Mindestversion, die ich jemals verwendet habe (überprü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"];
};
Carl Yestraus JavaScript Flash Detection Library, hier:
http://www.featureblend.com/javascript-flash-detection-library.html
... könnte das sein, wonach Sie suchen.
Vielleicht könnte das Flash Player Detection Kit von Adobe hier hilfreich sein?
http://www.adobe.com/products/flashplayer/download/detection_kit/
Das Erkennen und Einbetten von Flash in ein Webdokument ist eine überraschend schwierige Aufgabe.
Ich war sehr enttäuscht von der Qualität und den nicht standardkonformen Markups, die sowohl mit SWFObject- als auch mit Adobe-Lösungen generiert wurden. Außerdem haben meine Tests ergeben, dass der automatische Updater von Adobe inkonsistent und unzuverlässig ist.
Die JavaScript Flash Detection Library (Flash Detect) und die JavaScript Flash HTML Generator Library (Flash TML) sind eine lesbare, wartbare und standardkonforme Markup-Lösung.
- "Luke hat die Quelle gelesen!"
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();
Die Quelle finden Sie unter http://whatsmy.browsersize.com (Zeilen 14-120).
Hier ist der abstrahierte browserübergreifende Code auf jsbin, der nur zur Flash-Erkennung dient und funktioniert unter: FF / IE / Safari / Opera / Chrome.
detectObject()
Gegenstück für IE.
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;
};
Wenn Sie an einer reinen Javascript-Lösung interessiert sind, ist hier die, die ich von 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;
}
Wenn Sie nur überprü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-Plugin zum Aktivieren und aktivieren falsch negative Ergebnisse .
Um ein Flash-Objekt zu erstellen, das dem Standard entspricht (jedoch mit JavaScript), empfehlen wir Ihnen, einen Blick darauf zu werfen
Unauffällige Flash-Objekte (UFO)
Habe ein kleines erstellt, .swf
das umleitet. Wenn der Browser Flash-fähig 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");
}
}
Mit der Bibliothek goog.require ('goog.userAgent.flash') des Google Closure-Compilers habe ich diese beiden 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)
}