Note sul testing e debug in Adobe Flash
Giovedì 11 Ottobre, 2007Una considerazione, ovvia ma sottovalutata, durante lo sviluppo di applicazioni in Adobe Flash: la differenza tra il Player utilizzato per il testing all’interno dell’IDE Flash e l’oggetto (ActiveX o EMBED) usato dal nostro browser. Chi possiede la versione “Macromedia” Flash MX (la versione 8 per intenderci, ma questo discorso in realtà vale per qualsiasi versione di Flash…) quando sviluppa un filmato e lo prova all’interno dell’IDE Flash manda in esecuzione il Player legato al pacchetto di sviluppo. Quando poi si pubblica il filmato sulla rete e lo si “prova” con il Player Flash del browser si potrebbero riscontrare alcune - sostanziali - differenze!
![]() |
![]() |
Flash Player Release
La prima differenza, forse quella più importante, risiede nella versione del Player. Macromedia prima, e Adobe adesso, aggiornano spesso il Player Flash pubblico per i vari Browser (Microsoft Internet Explorer, FireFox, ecc… ad oggi alla 9.0.47.0 come stabile, 9.0.64.0 come release candidate sia per IE che gli altri). Questo significa che la versione usata all’interno dell’IDE di sviluppo non “viaggia” in parallelo con quella installata nel nostro browser. Le cose, poi, si complicano ulteriormente per chi - come me - ha più browser installati sulla macchina (per ragioni di sviluppo). Questa differenza di versioni, ovviamente, continuerà nel tempo a meno che Adobe non rilasci aggiornamenti paralleli anche per l’IDE di sviluppo; come speriamo accada per la versione CS3.
HTTP Request Header: occhio alla User-Agent
Una seconda differenza risiede nel testing di applicazione cross-domain, quando si accede ad esempio ad un file su un Web Server tramite gli oggetti LoadVars() o XML(). Un esempio concreto: ho usato l’oggetto XML() per caricare il Feed RSS da Google Calendar. Il filmato provato all’interno dell’IDE Flash funziona perfettamente. Provando il filmato dal browser, invece, la “load” dell’oggetto XML() va in errore! In pratica non viene caricato nessun Feed!
Perchè?
Prima di tutto la soluzione è stata quella di creare un proxy php, ovvero una pagina “foo” (fittizzia) che non fa altro che caricare la pagina Feed di Google originariamente inserita all’interno del codice Flash; in pratica Flash chiama questa pagina “foo” che a sua volta chiama il Feed di Google.
Sicuramente non è un problema di “permessi” o “security” in quanto dall’IDE Flash tutto funziona bene (comunque sia ho agito anche sugli strumenti di security messi a disposizione da Flash, senza alcun risultato apprezzabile, sia all’interno dell’IDE Flash che continua a funzionare sia all’interno del browser che continua a non funzionare).
Quello che ho notato, invece, e penso sia l’unica spiegazione logica, è la differenza di accesso alla pagina Feed Google tra il Player dell’IDE di sviluppo e il Player contenuto nel Browser. In particolare quello che cambia è l’header HTTP dello User-Agent. Eseguendo dei test infatti mi sono accorto che quando ci si presenta sulla rete tramite il protocollo HTTP usando l’IDE di sviluppo Flash lo User-Agent è impostato a “Shockwave Flash”. Lo stesso filmato eseguito dal Browser invia invece lo User-Agent del Browser: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30) nel caso di Microsoft Internet Explorer 7, Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 nel caso di FireFox 2.0.0.7 e così via!
In verità questo non è un vero e proprio errore di Flash, in quanto il “blocco” ovviamente risiede nella pagina che genera il Feed Google. Google, evidentemente, emette o meno il Feed in base allo User-Agent (questa è una procedura abbastanza diffusa e permette di controllare spider e crawler o altri motori di indicizzazione). Purtroppo non è possibile sovrascrivere lo User-Agent con la versione MX di Flash, o almeno io non ci sono riuscito, altrimenti il problema sarebbe risolto.
Insomma, un conto è provare un filmarto all’interno dell’IDE Flash e cosa ben diversa è provarlo direttamente dal browser (meglio più browser a questo punto)… almeno per filmati di una certa “complessità”.
























Lascia un commento