SMsoft – informatica e dintorni

varie su OSX, GNU/Linux e l'Open Source

Recuperare l’userAgent in una webapp Flex

Grazie all’uso della funzione ExternalInterface.call() di Flex/Flash Builder è possibile recuperare in modo semplice alcuni parametri del browser. Ad esempio, per recuperare l’userAgent, basterà inserire nell’applicazione web il seguente codice:

var userAgent:String = ExternalInterface.call("navigator.userAgent.toString");

e la variabile userAgent sarà popolata con l’userAgent del “visitatore”.

enjoy

Recuperare in Flex un parametro passato all’url

E’ possibile recuperare con Flex/Flash Builder in un’applicazione web, un parametro passato all’url della pagina che contiene l’applicazione.
Ipotizziamo che l’url dell’applicazione sia:
www.smsoft.it/app.html?parametro=ciao

e che l’applicazione contenga una casella di testo chiamata “txt” in cui inserire il valore di “parametro“, dovremo inserire nell’applicazione il seguente codice:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                           xmlns:s="library://ns.adobe.com/flex/spark"
                           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()"
                           >
        <fx:Script>
                <![CDATA[
                private function init():void {
               
                //      inizio recupero parametro da url
                var params:Object = getURLParameters();
                txt.text = params['parametro'];
                // fine recupero parametro da url
               
                }

                private function getURLParameters():Object
                {
                        var result:URLVariables = new URLVariables();
                        try
                        {
                                if (ExternalInterface.available)
                                {
                                        var fullUrl:String = ExternalInterface.call("eval","document.location.href");
                                        var paramStr:String = fullUrl.split("?")[1];
                                        if (paramStr != null)
                                        {
                                                result.decode(paramStr);
                                        }
                                }
                        }
                        catch (error:Error)
                        {
                                Alert.show(error.toString());
                        }
                               
                        return result;
                }      
                       
                ]]>
        </fx:Script>

        <s:TextInput x="183" y="65"  name="txt" id="txt"/>
</s:Application>

enjoy

Salvando un file con Flex/Air visualizzo l’errore SecurityError: fileWriteResource

Sono incappato in un messaggio di errore, apparentemente anomalo, durante il salvataggio di un file nella cartella dell’applicazione (File.applicationDirectory)

SecurityError: fileWriteResource
        at runtime::SecurityManager$/checkPrivilegeForCaller()
        at flash.filesystem::FileStream/open()

La porzione di codice che identificava il file (un’immagine nel mio caso) è:

downloadedFile = File.applicationDirectory.resolvePath("assets/logo.gif");

e la soluzione è al problema è puntare il file in quest’altro modo:

downloadedFile = new File("file:///" + File.applicationDirectory.resolvePath("assets/logo.gif").nativePath);

Spero possa esservi di aiuto…
Enjoy

I percorsi in Adobe Flex

I percorsi in Flex possono essere recuperati con le seguenti funzioni:
File.applicationStorageDirectory : La cartella di archiviazione specifica per ciascuna applicazione AIR installata
File.userDirectory : La cartella utente (es. c:\documents and setting\username o /Users/username)
File.documentsDirectory : La cartella che contiene i documenti
File.applicationDirectory : La cartella che contiene l’applicazione Flex
File.desktopDirectory : La cartella che contiene il nostro Desktop

Flex, ViewStack e null object reference error

Usando I viewstack con Flex, mi sono accorto che i vari stack non vengono inizializzati tutti all’avvio dell’applicazione e quindi se si tenta di utilizzare dei componenti presenti in uno stack ancora non aperto inizializzato, si viene avvertiti dal debugger di questa cosa(es null object reference error).

Per far si che tutti gli stacks vengano inizializzati all’avvio dell’applicazione ed utilizzare (es modificarne gli attributi) gli oggetti presenti in tutti gli stack fin da subito, basterà impostare l’opzione creationPolicy ad all. Ad esempio:

d90f4acbf669eec8423ec9e30d44bd79

Avviando il debug di Adobe Flex vedo: “error while loading initial content”

Se avviando un progetto sviluppato con Adobe Flex non lo vedete partire e lanciando il debug vedere un messaggio simile al seguente:

Process terminated without establishing connection to debugger.
 Command:
 /Users/tech/Applications/Adobe Flex Builder 3 Plug-in/sdks/3.2.0/bin/adl -runtime
 /Users/tech/Applications/Adobe Flex Builder 3 Plug-in/sdks/3.2.0/runtimes/air/mac
 /Users/tech/source/air_app/bin-debug/AIR-app.xml
 /Users/tech/Cynergy/source/air_app/bin-debug
Output from command: error while loading initial content

la risoluzione del problema è semplice. Basterà aprire il vostro file NomeApplicazione-app.xml e modificare la seconda riga da:

<application xmlns="http://ns.adobe.com/air/application/X.X">

a:

<application xmlns="http://ns.adobe.com/air/application/1.5">

amfphp, Flex ed i caratteri accentati

Mi sono imbattuto nello sviluppo di uno script PHP per interfacciare Flex con un database MySQL ed ho riscontrato problemi con la lettura ed il salvataggio di lettere accentate.

Dopo un pò di prove ho trovato la soluzione ottimale e la cosa è davvero semplice. Basta aggiungere le seguenti righe nello script PHP, subito dopo aver effettuato la connessione al database(quindi dopo la funzione mysql_connect()):

$sql = 'SET CHARACTER SET utf8';
$res = mysql_query($sql);

Fatto questo, sono riuscito a leggere e scrivere caratteri accentanti senza alcun problema nel DB MySQL.

NOTA: solo una piccola precisazione, ma sicuramente è superflua. I campi nel DB MySQL  hanno come collation utf8_general_ci
NOTA2: ho letto alcuni post che consigliano anche di modificare la riga 127 del file gateway.php di amfphp da:

$gateway->setCharsetHandler( "utf8_decode", "ISO-8859-1","ISO-8859-1" );

a

$gateway->setCharsetHandler( "none", "ISO-8859-1","ISO-8859-1" );

Page optimized by WP Minify WordPress Plugin