¿Alguien tiene un ejemplo de script que pueda funcionar bien de manera confiable en IE / Firefox para detectar si el navegador es capaz de mostrar contenido flash incrustado? Digo de manera confiable porque sé que no es posible el 100% del tiempo.
¿Alguien tiene un ejemplo de script que pueda funcionar bien de manera confiable en IE / Firefox para detectar si el navegador es capaz de mostrar contenido flash incrustado? Digo de manera confiable porque sé que no es posible el 100% del tiempo.
Respuestas:
SWFObject es muy confiable. Lo he usado sin problemas durante bastante tiempo.
$('html').addClass(typeof swfobject !== 'undefined' && swfobject.getFlashPlayerVersion().major !== 0 ? 'flash' : 'no-flash');
if( swfobject.hasFlashPlayerVersion("8.0") ) { }
si hay flash usando swfobject con Throws false si no hay flash instalado. El número es la versión mínima de Flash Player requerida.
Estoy de acuerdo con Max Stewart . SWFObject es el camino a seguir. Me gustaría complementar su respuesta con un ejemplo de código. Esto debería ayudarlo a comenzar:
Asegúrese de haber incluido el swfobject.js
archivo (consígalo aquí ):
<script type="text/javascript" src="swfobject.js"></script>
Entonces úsalo así:
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");
}
Reemplace "9.0.115" con la versión mínima de flash que necesite. Elegí 9.0.115 como ejemplo porque esa es la versión que agregó soporte para h.264.
Si el visitante no tiene flash, informará una versión flash de "0.0.0", por lo que si solo desea saber si tiene flash, use:
if(swfobject.hasFlashPlayerVersion("1"))
{
alert("You have flash!");
}
else
{
alert("You do not flash :-(");
}
if(SWFobject && SWFobject.hasFlashPlayerVersion("1")) { // code here }
Sé que esta es una publicación antigua, pero he estado buscando por un tiempo y no encontré nada.
Implementé la biblioteca de detección de Flash de JavaScript . Funciona muy bien y está documentado para un uso rápido. Literalmente me tomó 2 minutos. Aquí está el código que escribí en el encabezado:
<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>
Puede usar el compilador de cierre para generar una pequeña detección de flash entre navegadores:
// ==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');
}
que da como resultado el siguiente código "compilado":
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
del compilador de cierre de Google)? Solo quiero asegurarme de que no me estoy perdiendo alguna diferencia de matices aquí.
Versión mínima que he usado (no verifica la versión, solo el complemento Flash):
var hasFlash = function() {
return (typeof navigator.plugins == "undefined" || navigator.plugins.length == 0) ? !!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) : navigator.plugins["Shockwave Flash"];
};
Biblioteca de detección de Flash JavaScript de Carl Yestrau, aquí:
http://www.featureblend.com/javascript-flash-detection-library.html
... puede ser lo que estás buscando.
¿Quizás el kit de detección de Flash Player de Adobe podría ser útil aquí?
http://www.adobe.com/products/flashplayer/download/detection_kit/
Detectar e incrustar Flash en un documento web es una tarea sorprendentemente difícil.
Me decepcionó mucho la calidad y el marcado que no cumple con los estándares generados tanto por SWFObject como por las soluciones de Adobe. Además, mis pruebas encontraron que el actualizador automático de Adobe era inconsistente y poco confiable.
La biblioteca JavaScript Flash Detection Library (Flash Detect) y la biblioteca JavaScript Flash HTML Generator Library (Flash TML) son una solución de marcado legible, mantenible y compatible con los estándares.
- "¡Luke leyó la fuente!"
Código para una isFlashExists
variable de revestimiento :
<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>
Tenga en cuenta que hay una alternativa como esta: swfobject.getFlashPlayerVersion();
Vea la fuente en http://whatsmy.browsersize.com (líneas 14-120).
Aquí está el código de navegador cruzado resumido en jsbin solo para detección de flash , funciona en: FF / IE / Safari / Opera / Chrome.
detectObject()
contraparte de IE.
qué pasa:
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;
};
Si está interesado en una solución pura de Javascript, aquí está la que copio de 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;
}
Si solo desea verificar si el flash está habilitado, esto debería ser suficiente.
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: evite marcar el plugin habilitado , algunos navegadores móviles tienen un plugin flash que se puede pulsar para habilitar y activará un falso negativo.
Para crear un objeto Flash compatible con el estándar (sin embargo, con JavaScript), le recomiendo que eche un vistazo a
Objetos Flash discretos (OVNI)
Han creado un pequeño .swf
que redirecciona. Si el navegador está habilitado para flash, redirigirá.
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");
}
}
Usando la biblioteca goog.require ('goog.userAgent.flash') del compilador de cierre de Google, creé estas 2 funciones.
booleano hasFlash ()
Devuelve si el navegador tiene 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 (versión)
Devuelve si la versión flash es mayor que la versión proporcionada
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)
}