Czy ktoś ma przykład skryptu, który może działać niezawodnie w przeglądarce IE / Firefox, aby wykryć, czy przeglądarka jest w stanie wyświetlać osadzoną zawartość flash. Mówię rzetelnie, bo wiem, że to niemożliwe w 100% przypadków.
Czy ktoś ma przykład skryptu, który może działać niezawodnie w przeglądarce IE / Firefox, aby wykryć, czy przeglądarka jest w stanie wyświetlać osadzoną zawartość flash. Mówię rzetelnie, bo wiem, że to niemożliwe w 100% przypadków.
Odpowiedzi:
SWFObject jest bardzo niezawodny. Używałem go bez problemu od dłuższego czasu.
$('html').addClass(typeof swfobject !== 'undefined' && swfobject.getFlashPlayerVersion().major !== 0 ? 'flash' : 'no-flash');
if( swfobject.hasFlashPlayerVersion("8.0") ) { }
nie jest zainstalowana, używając swfobject z opcją Zgłasza false. Liczba to minimalna wymagana wersja Flash Playera.
Zgadzam się z Maxem Stewartem . SWFObject to droga do zrobienia. Chciałbym uzupełnić jego odpowiedź przykładem kodu. To powinno Ci pomóc:
Upewnij się, że dołączyłeś swfobject.js
plik (pobierz go tutaj ):
<script type="text/javascript" src="swfobject.js"></script>
Następnie użyj tego w ten sposób:
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");
}
Zastąp „9.0.115” dowolną minimalną wersją Flash, której potrzebujesz. Jako przykład wybrałem 9.0.115, ponieważ jest to wersja, która dodała obsługę h.264.
Jeśli odwiedzający nie ma Flasha, zgłosi wersję flash „0.0.0”, więc jeśli chcesz tylko wiedzieć, czy w ogóle ma flasha, użyj:
if(swfobject.hasFlashPlayerVersion("1"))
{
alert("You have flash!");
}
else
{
alert("You do not flash :-(");
}
if(SWFobject && SWFobject.hasFlashPlayerVersion("1")) { // code here }
Wiem, że to stary post, ale szukałem przez jakiś czas i nic nie znalazłem.
Zaimplementowałem bibliotekę JavaScript Flash Detection Library . Działa bardzo dobrze i jest udokumentowany do szybkiego użycia. Dosłownie zajęło mi to 2 minuty. Oto kod, który napisałem w nagłówku:
<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>
Możesz użyć kompilatora zamykania, aby wygenerować małe wykrywanie flashowania w różnych przeglądarkach:
// ==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');
}
co skutkuje następującym „skompilowanym” kodem:
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
z Google's Closure Compiler)? Chcę się tylko upewnić, że nie brakuje mi tutaj jakiejś niuansowej różnicy.
Minimalna wersja, z której kiedykolwiek korzystałem (nie sprawdza wersji, tylko wtyczka Flash):
var hasFlash = function() {
return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};
Biblioteka wykrywania Flash JavaScript Carla Yestrau, tutaj:
http://www.featureblend.com/javascript-flash-detection-library.html
... może być tym, czego szukasz.
Może przydałby się tutaj zestaw do wykrywania odtwarzacza flash firmy Adobe?
http://www.adobe.com/products/flashplayer/download/detection_kit/
Wykrywanie i osadzanie Flasha w dokumencie internetowym jest zaskakująco trudnym zadaniem.
Byłem bardzo rozczarowany jakością i niezgodnymi ze standardami znacznikami wygenerowanymi przez rozwiązania SWFObject i Adobe. Ponadto moje testy wykazały, że automatyczny aktualizator Adobe jest niespójny i zawodny.
Biblioteka wykrywania Flash JavaScript (wykrywanie Flash) i JavaScript Flash HTML Generator Library (Flash TML) to czytelne, łatwe w utrzymaniu i zgodne ze standardami rozwiązanie do tworzenia znaczników.
- "Luke przeczytaj źródło!"
Kod jednej isFlashExists
zmiennej liniowej :
<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>
Zauważ, że istnieje taka alternatywa: swfobject.getFlashPlayerVersion();
Zobacz źródło na http://whatsmy.browsersize.com (linie 14-120).
Oto abstrakcyjny kod dla przeglądarek na jsbin tylko do wykrywania flash , działa na: FF / IE / Safari / Opera / Chrome.
detectObject()
odpowiednik dla IE.
co powiesz na:
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;
};
Jeśli jesteś zainteresowany czystym rozwiązaniem Javascript, oto ten, który skopiowałem z 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;
}
Jeśli chciałeś tylko sprawdzić, czy flash jest włączony, to powinno wystarczyć.
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;
}
Uwaga: unikaj zaznaczania enabledPlugin , niektóre przeglądarki mobilne mają wtyczkę flash z funkcją dotknij, aby włączyć, która wywoła fałszywie negatywny wynik.
Aby utworzyć obiekt Flash zgodny ze standardem (jednak z JavaScriptem), polecam przyjrzeć się
Dyskretne obiekty błyskowe (UFO)
Stworzyłem mały, .swf
który przekierowuje. Jeśli przeglądarka ma włączoną obsługę Flash, przekieruje.
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");
}
}
Używając kompilatora Google Closure goog.require ('goog.userAgent.flash') utworzyłem te 2 funkcje.
boolean hasFlash ()
Zwraca, jeśli przeglądarka ma 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 (wersja)
Zwraca, jeśli wersja Flash jest większa niż wersja podana
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)
}