Rilevamento di Flash del browser incrociato in Javascript

Qualcuno ha un esempio di script che può funzionare in modo affidabile su IE / Firefox per rilevare se il browser è in grado di visualizzare contenuti flash incorporati. Dico in modo affidabile perché so che non è ansible il 100% delle volte.

SWFObject è molto affidabile. L’ho usato senza problemi per un bel po ‘.

Sono d’accordo con Max Stewart . SWFObject è la strada da percorrere. Vorrei completare la sua risposta con un esempio di codice. Questo dovrebbe farti iniziare:

Assicurati di aver incluso il file swfobject.js ( swfobject.js qui ):

  

Quindi usalo in questo modo:

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

Sostituisci “9.0.115” con qualsiasi versione flash di cui hai bisogno. Ho scelto 9.0.115 come esempio perché è la versione che ha aggiunto il supporto h.264.

Se il visitatore non ha il flash, segnalerà una versione flash di “0.0.0”, quindi se vuoi solo sapere se hanno il flash, usa:

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

So che questo è un vecchio post, ma ho cercato per un po ‘e non ho trovato nulla.
Ho implementato la libreria di rilevamento flash JavaScript . Funziona molto bene ed è documentato per un uso rapido. Mi ci sono voluti letteralmente 2 minuti. Ecco il codice che ho scritto nell’intestazione:

   

È ansible utilizzare il compilatore di chiusura per generare una piccola rilevazione flash cross-browser:

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

che risulta nel seguente codice “compilato”:

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

Versione minima che abbia mai usato (non controlla la versione, solo Flash Plugin):

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

Libreria di rilevamento flash JavaScript di Carl Yestrau, qui:

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

… potrebbe essere quello che stai cercando.

Forse il kit di rilevamento flash player di adobe potrebbe essere utile qui?

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

Rilevare e incorporare Flash in un documento Web è un compito sorprendentemente difficile.

Sono rimasto molto deluso dal markup di qualità e non conforms generato dalle soluzioni SWFObject e Adobe. Inoltre, i miei test hanno rilevato che il programma di aggiornamento automatico di Adobe è incoerente e inaffidabile.

La libreria JavaScript Flash Detection (Flash Detect) e la libreria JavaScript Flash HTML Generator (Flash TML) sono una soluzione di markup leggibile, gestibile e conforms agli standard.

– “Luke legge la fonte!”

Il codice per una fodera isFlashExists variabile isFlashExists :

   

Si noti che esiste un’alternativa come questa: swfobject.getFlashPlayerVersion();

Visualizza la fonte su http://whatsmy.browsersize.com (righe 14-120).

Ecco il codice cross browser astratto su jsbin per il solo rilevamento flash , funziona su: FF / IE / Safari / Opera / Chrome.

che dire:

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

Se sei interessato a una soluzione Javascript pura, ecco quella che copio da 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; } 

Se vuoi solo verificare se il flash è triggersto, questo dovrebbe essere sufficiente.

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

Nota: evita di selezionare enabledPlugin , alcuni browser mobili hanno il plug-in flash plug-to-enable e triggersno il falso negativo.

Per creare un object Flash conforms allo standard (con JavaScript comunque), ti consiglio di dare un’occhiata a

Oggetti Flash non intrusivi (UFO)

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

Ho creato un piccolo .swf che reindirizza. Se il browser è abilitato per il flash, verrà reindirizzato.

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