usar flash + contenido alternativo (object tag)
7 seguidores
necesito usar flash en una web, que funcione en IE + NS. Pero ojo, ademas de eso, que pueda poner contenido alternativo dentro del object. Es decir, si el navegador no tiene el flash que vea el html alternativo.
¿Que hay mal en este ejemplo? Mozilla sin el plugin no muestra nada.
<code> <object type="application/x-shockwave-flash" data="index.swf" width="743" height="350">
<param name="movie" value="index.swf">
<!-- contenido alternativo accesible -->
<img src="imgs/cabecera.jpg" width="663" height="185" alt="cabecera">
<!-- fin contenido alternativo accesible -->
</object>
</code>gracias
meddle
pues muuuuchas gracias, a ver si esta tarde mismo tengo preparado un ejemplito para que vayais probando si os funciona a todos. ya tengo preparada una pagina con 2 metodos 1. con codebase+classid 2. sin codebase+classid), mostrando el codigo y todo eso, pero cuando tenga esto añadire el metodo 3 y colgare la pagina para todos.
txuma Plus
y por cierto, para hacer pruebas de como funcionan las cosas con versiones antiguas:
http://www.macromedia.com/support/flash/ts/documents/oldplayers.htm
txuma Plus
si, claro que si es posible, y bastante sencillo y logico.... por eso estoy rojo como un tomate :P
Desde la version 4 está disponible la variable 'oculta' $version, así que es perfectamente posbile.
Aquí está la información sobre como detectar la version de flash utilizando una pelicula de flash:
http://www.macromedia.com/support/flash/ts/documents/version.htm
(mira la parte que pone A basic Player version detection script)
Si alguien no tiene el plugin, mostrará contenido alternativo directamente, y con este sistema consigues controlar que contenido muestras a las distintas versiones.
Abrazos
meddle
¿asi que te parece (en teoria) algo posible de hacer? no sabes cuanto me alegraria...
txuma Plus
Joder, soy gilipollas. Se que posiblemente me mates, pero la verdad es que no sé como no se me ocurrio antes un sistema como ese... sobre todo porque yo ya conocía algo parecido que había preparado Collin Moock hace tiempo.
La diferencia es que Moock lo hacía para detectar versiones anteriores de Flash y redireccionaba a una página. Pero el concepto es muy parecido: utilizar el propio flash para saber que versión está instalada :oops:
meddle
Bueno, como me he cansado de esperar a que la persona que me tiene que ayudar en esto me ayude (ejem ejem :)) y a mi me gusta terminar las cosas y olvidarme del tema, me dispongo a exponer la teoria de mi tecnica aqui mismo, a ver si algun alma caritativa puede comprobarlo. El tema consistiria en:
1. meter una pelicula flash 4 (si, he dicho flash 4) en el object principal (sin classid ni codebase) (*) Esta peli actuaria como lanzadera, de modo que se encargaria de detectar el plugin usado por el
user y:
a. si el user tiene MX entonces carga otra peli con todo el menu dinamico.
b. si el user tiene un plugin inferior a MX entonces cargar un menu muy basico (tipo una lista html) en flash 4 (o un menu html, que no se si se puede). Lo mejor seria que pudiese cargar el contenido de un archivo txt o html, pero no se si en el 4 se puede.
2. ademas de eso, tener el contenido alternativo en el object. en este caso cargaria este contenido si el navegador no tiene el plugin.
Como el problema eran los navegadores que tenian plugins antiguos, esta tecnica deberia funcionar para todos los que no tengan plugin o tengan plugin igual o mayor que 4. Los que tengan plugin menor que 4 estaran en el mismo caso que me encuentro yo ahora, pero de esos ya no deben haber muchos, ¿no? Digo que deberia funcionar en teoria, claro, ya que nunca he usado flash.
(*) = El html del object seria algo como esto:
<code><object type="application/x-shockwave-flash" data="lanzadera.swf" width="400" height="100">
contenido alternativo para navegadores sin plugin
<param name="movie" value="lanzadera.swf" />
</object></code>
RESUMEN:
la lanzadera deberia cargarse en los navegadores con plugin >= 4
si lanzadera detecta Flash MX deberia cargar un index.swf
si lanzadera NO detecta Flash MX deberia cargar un texto alternativo (mejor de archivo o directamente en flash)
si lanzadera no carga (no plugin flash 4) entonces mostrar contenido alternativo de object
xrv
estamos a la espectativa :D
meddle
por cierto Marc esa tecnica tampoco funciona en mi FF con plugin 5 ;)
a ver si me contestan al email y os cuento algo de una vez...
txuma Plus
meddle
ei gracias por acordarte!
luego te digo algo, aun estoy esperando a que una persona me compruebe mi solucion para darla aqui, ya os dire algo :)
Estoy esperando ansionso esa solución :)
meddle
ei gracias por acordarte!
luego te digo algo, aun estoy esperando a que una persona me compruebe mi solucion para darla aqui, ya os dire algo :)
xrv
en ASNATIVOS (http://www.sidedev.net/asnativos) se ha estado tratando este tema hace bien poco.
ahí va una solución aportada por Joseba Alonso:
<code>
Bueno, yo suelo utilizar un pequeño juego con 3 cajas:
La primera esta en display:none y basicamente sirve para proporcionar un
contenido alternativo en forma de texto. Normalmente usado por los bots de
indexacion.
La segunda lleva el codigo de Flash que te mande en el otro email.
Quitandole lo del pluginspace para evitar el mensaje ese feote del "click
here...". Esta utiliza posicionamiento para colocarla en un z-index de 2
La tercera contiene el codigo de "Necesitas el plugin de Flash blah blah".
XHTML puro y duro de toda la vida. La caja esta tambien con posicionamiento
y z-index de 1 para que quede por debajo de la pelicula Flash, asi si la
persona tiene el plugin simplemente no la ve.
Un sitio donde lo he usado para que veas el codigo fuente:
http://www.esmadrid.com/monograficos/barajas/02barajas.html
Las tablas de la caja no-flash no las he puesto yo eh?!! x´D
Joseba Alonso
www.sidedev.net
www.5dms.com </code>
meddle
si al final creo q voy a usar js, pero como bien dices s iel nav. tiene plugin pero no js no vera nada. pero bueno. y el hecho de que macromedia use un metodo u otro no me dice nada. tambien IE usa muchas cosas raras y sigue sin gustarme como navegador :)
gracias por el input
noad
A ver, yo de flash no tengo ni idea, pero el recurso que yo utilizaria es ¿como resuelven ese problema los de macromedia?
En la pagina de macromedia utilizan .js para verificar la existencia y la version del plugin, y a continuacion, escriben tanto el contenido en flash como el contenido alternativo en dos .js externos y consecutivos, seguidos de una declaracion noscript.
Y digo yo (aunque no soy capaz de asegurarlo que con las cosas que uno ve por ahi...) que si macromedia resuelve el problema usando .js sera esa la forma correcta, no?
Una pega que tiene es que el navegador tenga el plugin, pero tenga javascript desactivado, por lo que aun teniendo el plugin, se perdera el contenido en flash.
Se que no es ni mucho menos la solucion que esperabas, pero espero que te sirva para acercarte a ella.
meddle
eso parece... aunque me niego a creer que el Sidar por ejemplo no haya previsto esto... no se. seguiremos investigando. gracias
txuma Plus
meddle
<div class="quote">
txuma
<blockquote>Eso sí, esto sirve solo en caso de que NO tengas instalado el plugin, pero no vale si tienes una versión del plugin más antigua que en la que has exportado la pelicula. </blockquote>
</div>ese es EXACTAMENTE el problema.
En ese caso no se me ocurre otra forma que usar un script, porque además no te vale con saber si tienes flash o no, sino que nececisitas saber la versión que tiene instalada :?
meddle
txuma
Eso sí, esto sirve solo en caso de que NO tengas instalado el plugin, pero no vale si tienes una versión del plugin más antigua que en la que has exportado la pelicula.
ese es EXACTAMENTE el problema.
txuma
Sobre el uso de EMBED: había visto algún ejemplo usando NOEMBED, pero mi lado estricto del cerebro lo había descartado de forma automática porque no forma parte de la especificación.
el problema usando embed/noembed es que en opera sin plugin no se ve nada. lo de la validacion me la suda bastante.
meddle
alterebro, dejame estudiarlo, pero MUCHAS gracias
txuma Plus
Sergi, ese último ejemplo que has puesto (el de la lista) usa el mismo sistema que yo te había pasado unos cuantos post antes: insertar el contenido alternativo dentro de la etiqueta OBJECT ;) Lo que debe hacer es, si no reconoce el tipo MIME del objeto que quieres cargar seguirá leyendo el código y por tanto muestra el contenido alternativo.
Eso sí, esto sirve solo en caso de que NO tengas instalado el plugin, pero no vale si tienes una versión del plugin más antigua que en la que has exportado la pelicula.
Pero seguimos probando ;)
Sobre el uso de EMBED: había visto algún ejemplo usando NOEMBED, pero mi lado estricto del cerebro lo había descartado de forma automática porque no forma parte de la especificación.
alter_ebro
Os cuento el truquillo que uso yo para detectar el flash y mostrar contenido alternativo, pero usando Javascript, nose si os servira.
Tengo dos capas, una con el contenido alternativo y otra con el flash, la del contenido alternativo la tengo en un principio oculta.
En la pagina tengo definidas dos funciones javascript, la primera lo que hace es mostrar el contenido flash y ocultar el contenido alternativo, la otra hace justo lo contrario, muestra el contenido alternativo y esconde el flash pero se espera un rato a ejecutar la funcion
Cuando carga la pagina el flash, en la primera linea de codigo del SWF llamo a la funcion que muestra el flash y oculta el contenido alternativo y detiene la funcion ke estqa esperando un rato para mostrar el contenido alternativo.
De esta manera ocurre lo siguiente: si existe el flash y lo puede ejecutar, este con la llamada en el codigo actionScript del swf a la funcion de mostrar flash y ocultar alternativo lo muestra y tan felices, y, si por el contrario tiene algun problema en ejecutar el flash, este, no llama a la funcion de mostrar flash y pasado el tiempo k le digo pos muestra la capa kon el contenido alternativo y oculta la del flash.
como nose si mexplico como el culo, pongo un codigo de ejemplo ;)
<code>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>detecta flash chaval</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
#flashContent {
display : block;
}
#altContent {
display: none;
line-height: 15px;
width: 350px;
height: 200px;
}
</style>
<script language="JavaScript">
function stopFlashDetection() {
count = null;
document.getElementById('flashContent').style.display = "block";
document.getElementById('altContent').style.display = "none";
clearTimeout(flashDetection_id);
}
count = 0;
limit = 5;
function startFlashDetection() {
count++;
flashDetection_id = window.setTimeout("startFlashDetection();",1000);
if ( count == limit ) {
document.getElementById('flashContent').style.display = "none";
document.getElementById('altContent').style.display = "block";
window.clearTimeout(flashDetection_id);
}
}
startFlashDetection();
</script>
</head>
<body>
<!-- inicio contenido alternativo y contenido flash -->
<div id="altContent">
<p>
Aqui va todo el contenido alternativo que se quiera meter, se debe poner un enlace a la pagina de descarga
del plugin flash en Macromedia
<a href="http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" target="_blank" title="download the Flash PlugIn">
http://www.macromedia.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash</a><br>
y un enlace a la funcion javascript (a href="javascript:stopFlashDetection();") que muestra el contenido flash y esconde
el contenido alternativo por si algo ha fallado o el usuario ya ha descargado el Flash Player.<br>
<a href="javascript:stopFlashDetection();" title="entrar en el website">Click aqui para ver el flash</a>
</p>
</div>
<div id="flashContent">
<object type="application/x-shockwave-flash" data="flashMovie.swf" width="350" height="200">
<param name="movie" value="flashMovie.swf"><img src="noFlash.gif" width="350" height="200" alt="Flash Player Needed!">
</object>
</div>
<!-- fin contenido alternativo y contenido flash -->
</body>
</html>
</code>
la variable limit es el numero de segundos k espera la funcion para que si no se ha cargado el flash que muestre la capa alternativa, pienso k 5 segundos es mas k suficiente.
suelo utilizar esto siempre para meter textos ocultos para los buscadores y eso, el unico fallo que tiene es k si no se carga el flash, en la barra de estado siempre aparece la barra azul a medio cargar, pero el contenido alternativo siempre se muestra correctamente.
Weno, a ver si os sirve.
Saludos chau
meddle
gracias, yo tb sigo haciendo cosas, no es que esté llorando todo el rato ;)
(estoy probando una combinacion de server-side con client-side scripting)
txuma Plus
dame un ratillo que estoy haciendo algunas pruebas ;)
meddle
txuma
Con que browsers lo has probado?? Yo estoy mirando este ejemplo y parece que sí me funciona.
txuma, el problema es que con ese codigo, si el navegador (Mozilla) tiene un plugin antiguo trata de reproducir el flash (porque si que lee bien la ruta) pero no puede y entonces ni lee el flash ni lee el html alternativo.
Una solucion quiero :(
Si por lo menos los putos navegadores soltaran el HTTP_ACCEPT de manera correcta, mecagüensusputosmuertos....
meddle
Bueno pues no, parece que Firefox con Plugin MX no carga el flash (aunque si el html alternativo). Joder odio tener que usar javascript...
meddle
Bueno pues parece que lo he conseguido, pero claro, no puedo comprobarlo con un 100% de seguridad. Lo que he hecho:
<code><object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0"
align="baseline" border="0" width="743" height="350">
<div id="menu">
<ul>
<li><a ref="#">a</a></li>
<li><a href="#">b</a></li>
<li><a href="#">c</a></li>
<li><a href="#">d</a></li>
</ul>
</div>
<param name="movie" value="index.swf">
<param name="quality" value="high">
</object></code>Ahora por lo que parece, el contenido alternativo (menu html con lista) se presenta en navegadores que
1) no tienen plugin o bien
2) tienen un plugin antiguo
mientras que en los demas (tienen plugin actual) se muestyra el flash.
Vosotros que teneis mas ejemplos y eso, podeis comprobarlo, ¿plis? - haced algo coño, que me estoy cabreando con el puto flash y la mayoria me dejais mas solo que la una :P
xrv
pues no se man, normalmente nunca me he preocupado de si tienen o no el flashplayer ya que el mismo objeto se encarga de pedirlo, no se ... no es algo que al menos a mi me quite el sueño (si tengo que tomarme eso en serio uso el churro y listos :))
meddle
gracias, pero viendo todo ese churro ya tengo claro que no lo voy a usar, vaya churro de lineas nen! ;)
gracias entodosmodos.
ahora en serio: ¿nadie tiene una puñetera respuesta a mi ultimo msg? (object+embed+noembed) joder aki todos sois flasheros coño :)
xrv
weno, lo prometido es deuda, ya se que prefieres no usar JS pero ahí va (es una adaptación a mi manera del code de moock):
var rv = 6; //versión minima
f2=f3=f4=f5=f6=f7=f8=f9= false;
var mv = 9; //versión máxima
var av = 0;
hrv = false;
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
if(isIE && isWin){
document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('f2 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.2"))) \n');
document.write('f3 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.3"))) \n');
document.write('f4 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.4"))) \n');
document.write('f5 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) \n');
document.write('f6 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.6"))) \n');
document.write('f7 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.7"))) \n');
document.write('f8 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.8"))) \n');
document.write('f9 = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.9"))) \n');
document.write('<\/SCR' + 'IPT\> \n');
}
if (navigator.plugins) {
if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
var fd = navigator.plugins["Shockwave Flash"].description;
var fv = parseInt(fd.substring(16));
f2=fv==2;
f3=fv==3;
f4=fv==4;
f5=fv==5;
f6=fv==6;
f7=fv==7;
f8=fv==8;
f9=fv>=9;
}
}
for (var i = 2; i <= mv; i++) {
if (eval("f" + i) == true){
av = i;
}
}
if(navigator.userAgent.indexOf("WebTV") != -1){
av = 4;
}
if (av >= rv) {
hrv = true;
}
function swf(u,w,h){
var f;if(hrv){
//código para flash
//u -> nombre del flash que se quiere insertar
//w & h -> medidas
f='<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH="'+w+'" HEIGHT="'+h+'"><PARAM NAME="MOVIE" VALUE="/img/swf/'+u+'.swf"><PARAM NAME="PLAY" VALUE="true"><PARAM NAME="LOOP" VALUE="false"><PARAM NAME="QUALITY" VALUE="high"><PARAM NAME="MENU" VALUE="false"><EMBED SRC="/img/swf/'+u+'.swf" WIDTH="'+w+'" HEIGHT="'+h+'" PLAY="true" LOOP="false" QUALITY="high" MENU="false" TYPE="application/x-shockwave-flash"></EMBED></OBJECT>'
}else{
//código alternativo
f='<img src="/img/swf/'+u+'.jpg" height="'+h+'" width="'+w+'">'
}
document.write(f);}
luego para instanciarlo usas
<script type="text/javascript">swf("lapeli",550,400);</script>
ala, esperemos que te sea útil, y si no pues ná :P
meddle
bueno, ¿que os parece este codigo? No se si valida por el uso de EMBED (pero que conste que eso para mi no ha sido una prioridad, la prioridad es que sea accesible con un contenido alternativo) pero parece que se ve en todos:
http://209.204.223.237/compren/scripts.htm
es decir:
<code><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=4,0,2,0"
width="100" height="20" title="SIDAR">
<param name=movie value="sidar.swf">
<param name=quality value=high>
<param name="BGCOLOR" value="">
<embed src="sidar.swf" quality=high
pluginspage="http://www.macromedia.com/shockwave/download/
index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash" width="100" height="20" bgcolor="">
</embed>
<noembed><a accessKey=S z-index:2 href="http://www.sidar.org" title="Página principal
del Sidar.">Sidar</a></noembed>
</object></code>me temo que es el tipico de siempre pero añadiendo el noembed, ¿no?
meddle
justo lo que estaba pensando en el bus, añadir el classid y el codebase. creo que el problema era que al no estar, el NS que tenia un flash 5 pillaba el objeto como ok pero al ser un flash MX se hacia la picha un lio y no cargaba ni lo uno ni lo otro. dejame probar...
pedro_fm
mirate el primer enlace. la tecnica que comentan es sumamente sencilla no?