allora vorrei il vostro aiuto per barcamenarmi nel vasto mare della validazione xhtml+flash :tongue:
premetto che ho già setacciato il web in cerca di soluzioni e ho letto, testato e in alcuni casi utilizzato saluzioni tra le più disparate, nessuna però pare essere "definitiva" (la cosa migliore mi appare ancora essere quella di non validare per nulla)... quindi se qualcuno la soluzione definitiva l'avesse trovata è gentilmente pregato di farmi sapere
Definiamo un OBIETTIVO: l'obiettivo di sto thread è quello di produrre un doc xhtml con dentro un filmato flash visibile su tutti (o quasi) i browser che superi la validazione xhtml 1.1 w3c
apro una parentesi -> (non mi interessano in questa sede discussioni psicologico/filosofiche sui perchè della validazione e sull'opportunità di trovare dei "trucchi" per far passare un documento che altrimenti non passerebbe, ecc. non fanno parte dell'obiettivo, lo dico perchè è un argomento in voga su molti forum/newsgroup e c'è più gente che litiga di quella che cerca una soluzione valida :quipy: )
IL PROBLEMA: il problema, come tutti già saprete (lo dico solo per completezza), è che il metodo classico che si usa per inserire un flash movie in una pagina non passa la validazione in virtù della presenza del tag <embed> che non esiste in xhtml
LE DISPARATE (ed approssimative) SOLUZIONI
1) Eliminare il tag <embed> mettere il movies in un div, mettere come sfondo al div un'immagine alterativa (statica) del filmato.
Ok il documento è valido, tutto funziona su IE però ns/moz e derivati non vedono per nulla il filmato e visualizzano l'immagine alternativa. Oddio se il filmato è un'immagine di contorno potrebbe pure andare, ma se appena ci metti un menù questo metodo comincia a starmi stretto anche perchè io navigo con mozilla e il fatto di non vedere completamente il mio stesso sito mi starebbe sulle balle. SCARTATO!
2) Definire un DTD alternativo, sulle basi di quello del w3c ed aggiungerci il tag embed.
Pare fuzioni (leggete qui), però l'autore stesso di questa pensata (non semplice da realizzarsi) dice di non sapere se la cosa va su tutti i sistemi/browser e comunque il validatore del w3c non accetta DTD definiti dall'utente e continuerebbe a darvi l'errore. SCARTATO!
3) Sniffare il browser con js e andare a scrivere il tag <embed> solo se il visitatore entra con qualcosa che non sia IE.
Seguite sempre il link del metodo 2 per un esempio oppure qui ne trovate uno più complesso. Funziona, però l'autore ci racconta che ci sono problemi se uno non ha il plug-in installato, problemi che per altro non sono riuscito a ricreare e poi giustamente dice: "pages may validate, but it feels as though it goes against the spirit of validation...", effettivamente ha ragione, validare una pagina non vuol dire nascondere in commenti le parti che non verrebbero accettate... SCARTATO!
4) Usare il cosiddetto "metodo Satay ".
Non tutti sanno che anche ns/moz supportano il tag object, quello che non supportano nella sintassi tradizionale sono il classid="" e il codebase="" stile controllo activeX, questo:
<object type="application/x-shockwave-flash" data="movie.swf" width="400" height="300">
<param name="movie" value="movie.swf" />
</object>
verrebbe letto da mozilla e soci e anche da ie, solo che sfortunatamente ie ha un baco e in questo modo non esegue lo streming del filmato, il metodo Satay risolve (con un trucco non esaltante) anche questo baco, però in determinate situazioni difficilmente riproducibili sui sistemi win+ie non funziona proprio e se uno non ha il plugin di flash 6 sono casini. Io questo l'ho provato, funziona anche bene (a me) è facile da implementare, è una soluzione plausibile, ma lontana forse da quella soluzione definitiva di cui parlavamo. PARZIALMENTE SCARTATO!
5) Mettere nella pagina 2 tag object uno dentro l'altro, uno è il solito per IE e l'altro è quello del metodo Satay per mozilla
Mozilla e soci se ne sbattono dell'object per IE e leggono il loro, però sfortunatamente quel testone di ie li legge entrambi. Allora bisogna trovare il modo di nascondere a IE il secondo object. il che ci porta ai punti successivi.
5.1) Integriamo il punto 5 con il punto 3, ovvero sniffiamo il browser e scriviamo i 2 object nel modo che ci interssa a noi.
Purtroppo non ho trovato esempi funzionati di questa cosa in rete però così a occhio potrebbe funzionare (DA PROVARE).
5.2) Usiamo dei tag condizionali "strani" che vengono letti solo da ie
codice:
<!--[if gte IE 5]>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"
width="400" height="100">
<param name="movie" value="ie5win.swf" />
<param name="loop" value="false" />
<param name="quality" value="high" />
<param name="bgcolor" value="#cccccc" />
</object><div style="display:none">
<![endif]-->
<object type="application/x-shockwave-flash" data="everyoneelse.swf" width="400" height="100">
<param name="movie" value="everyoneelse.swf" />
<param name="loop" value="false" />
<param name="quality" value="high" />
<param name="bgcolor" value="#cccccc" />
</object>
Non conoscevo questa sintassi, ma pare ad una prima analisi che risolvano il problema, andrebbero testati su tutti i browser però e qui decisamente mi serve aiuto perchè io l'ho provato su IE 5.0 e mozilla 1.1 su win2000 e va... e sugli altri? E se uno non ha il plugin installato? (versione funzionante direttamente dal sito su cui ho scoperto questa possibilità)
------------------------------
Ok, ho fatto il post più lungo della mia vita su questo forum, adesso se volete farmi contento deve saltar fuori uno con la soluzione in tasca già pronta, altrimenti si potrebbe provare a percorrere insieme le piste 5.1 e 5.2, altrimenti ancora mi toccherà tenermi le mie pagine xhtml che sono corrette, ma che non passano il maledetto test