Elemento button: bug su explorer

Che Internet Explorer non rispetti gli standard XHTML/CSS è noto. Nemmeno la nuova versione 7 è immune da una serie infinita di comportamenti anomali, non in linea con gli standard internazionali definiti dal W3C nel lontano 1999.

Ma il bug presente sull’elemento BUTTON è davvero interessante. Infatti non si tratta di una errata visualizzazione di un elemento, ma addirittura di una diversa trasmissione dei dati inoltrati al server attraverso una richiesta di tipo POST. Insomma non è un problema di tipo “visivo” uguale a quelli contro cui combattiamo giornalmente tutti noi sviluppatori di progetti web, ma un “difetto” di trasmissione dei dati al server.

E’ un bug non troppo noto per due motivi principali:

  1. l’elemento BUTTON non è molto utilizzato dagli sviluppatori web perché può essere sostituito con l’elemento INPUT e in quasi tutti i form si trova quest’ultimo elemento;

  2. nella quasi totalità dei casi un form ha un solo pulsante di invio e i dati inviati dal server vengono processati senza prestare attenzione al valore del pulsante di submit ma interpretando gli altri dati inviati tramite POST.

Talvolta però si ha la necessità di creare nello stesso form più pulsanti di invio, a ognuno dei quali corrisponde una diversa azione da compiere. E’ una eventualità molto remota, quasi mai necessaria nei siti internet. Ma nelle web application invece può capitare e allora ecco il problema.

Questo è il codice per inserire un pulsante BUTTON in un form

Dall’altra parte il server dovrebbe ricevere nella variabile $_POST[‘azione’] il valore test contenuto nell’attributo value.

E questo è quello che succede in tutti i browser, meno che su IE, in qualunque versione. Perché il browser di casa Microsoft nella variabile $_POST[‘azione’] ci inserisce il contenuto visualizzato dal bottone stesso e cioè nell’esempio sopra la stringa “Contenuto visualizzato del pulsante”.

Comportamento davvero bizzarro per un elemento che è stato creato appositamente per avere un valore da passare come parametro al server e una porzione di codice da inserire in fase di visualizzazione in modo da poterlo manipolare con i dovuti comandi CSS.

Diciamo subito che non c’è un bug fix, insomma Microsoft non ha corretto l’errore, evidentemente sono convinti che questo debba essere il comportamento corretto.

Vediamo ora alcune soluzioni

Primo caso


Se si ha la possibilità di modificare il nome dell’elemento BUTTON allora il gioco è già fatto.

Sullo script lato server basterà verificare se è definita la variabile che ci si attende e eseguire la corrisponde operazione

if(isset($_POST[‘salva’])){
funzione di salvataggio
}

if(isset($_POST[‘modifica’])){
funzione di modifica
}

Purtroppo questa soluzione semplice e lineare funziona su Explorer 7 ma non sul 6. Infatti quest’ultimo non si limita a passare al server solo la variabile che ha ricevuto il click del mouse ma anche tutte le altre variabili. In questo caso quindi lo script sul server non avrebbe modo di sapere quale azione è stata scelta nel form di invio.

Una possibile soluzione sarebbe quella di inserire all’interno dell’elemento BUTTON il vero valore dell’azione scelta nel form, magari includendola in un elemento SPAN e poi nascondendola attraverso l’istruzione display:none di CSS.


Sul server si potrebbe catturare tutta la stringa contenuta nella variabile $_POST[‘operazione’] e attraverso una espressione regolare andare a cercare il contenuto chiave, in questo esempio salva o modifica.

Ma l’utilità di utilizzare BUTTON al posto di un INPUT è quella che all’interno dell’elemento BUTTON ci può essere una porzione di codice HTML anche complessa. Questa possibilità, sommata alla necessità di inserire un codice invisibile per recuperare l’azione indicata dal pulsante, potrebbe generare un problema di accessibilità in quanto non si può essere certi che il testo invisibile sia effettivamente invisibile a tutti i dispositivi di lettura della pagina web, per esempio i lettori vocali.

Insomma, quello che in origine è un vantaggio in accessibilità potrebbe diventare un ostacolo in più.

Allora c’è sempre la possibilità di tornare sui propri passi e inserire di nuovo il pulsante di invio attraverso un campo INPUT, per esempio, nel caso di invii multipli, utilizzando un INPUT di tipo IMG.

Ma anche qui c’è da stare attenti perché ancora una volta IE, in tutte le versioni, non riconosce l’attributo VALUE del campo INPUT, ma restituisce solamente le coordinate X Y del punto in cui si è cliccata l’immagine.

Questo significa che non si potrà recuperare il valore di $_POST[‘operazione’] (perché in IE non esiste) ma si dovrà verificare l’esistenza di $_POST[‘operazione_x’], oppure $_POST[‘operazione_y’], cioè le coordinate del punto dell’immagine che ha ricevuto il click.

Anche in questo caso si può introdurre un elemento di inaccessibilità perché se anziché verificare la presenza della variabile si cercasse di individuare una cerca coordinata di XY, bisognerà tener presente che in caso di accesso al form con la tastiera e non con il mouse, le coordinate XY sono sempre 0.

Conclusione.

Dietro un semplice form con più pulsanti di input si possono nascondere una grande quantità di insidie, davvero difficili da trattare e spesso con soluzioni che rassomigliano di più a una toppa che a una soluzione vera e propria.

Tutto per colpa di Explorer, ovviamente.

]]>

Il migliore blog su Blogger

Oggi, girovagando fra i report di Google Analytics, mi è capitato di notare che alcuni accessi al mio vecchio blog su Blogger sono stati fatti utilizzando la frase di ricerca “i migliori blog su blogger”.

Questa cosa mi ha incuriosito e effettivamente, cercando proprio “i migliori blog su blogger” il mio blog http://fabriziocaccavello.blogspot.com ha un buonissimo ranking, addirittura tra i primi posti della seconda pagina. Mi dispiace quindi aver deciso di abbandonare quel blog, che forse proprio ora stava migliorando le sue performance, ma il passaggio a questa piattaforma che invece è “motorizzata” da SmartControl non sarà un salto all’indietro e se le mie previsioni sono giuste entro pochi mesi la mia tracciabilità sul web potrebbe avere degli ottimi risultati.

A proprosito di ottimi risultati, ho anche notato che il portale giornalistico online MondoFuoristrada, di Alberto Mazzantini, realizzato da noi quasi un annetto fa e presentato ufficialmente al salone di Ginevra lo scorso anno, ha raggiunto la primissima posizione su Google con la parola chiave primaria “fuoristrada”.

Un grande successo perché il sito web non è stato curato da nessuna agenzia di SEO (Search Engine Optimization) e i risultati positivi sono da attribuire esclusivamente all’impianto base del sito (layout e CMS) e alla pubblicazione dei contenuti.

Ma di questo parleremo in un altro post, magari in occasione del primo compleanno quando faremo un resoconto dei primi 12 mesi di vita.

 

]]>

Da oggi il nuovo blog (finalmente)

2008Finalmente ci siamo il 2008 per me si apre così, con la nascita del mio nuovo blog.

Chi ha seguito le mie peripezie per il web sa che in un primo momento il mio blog era pubblicato sulla piattaforma di blogging di www.orvietonews.it che si chiamava Orvietoblog e era realizzata con il software LifeType. Quando per motivi tecnici (legati appunto alla inaffidabilità di LifeType) e per motivi editoriali decidemmo di chiudere tale piattaforma ho spostato il mio blog su Blogger  (http://fabriziocaccavello.blogspot.com), la nota piattaforma di blogging messa a disposizione da Google.

Ora nuovo spostamento qui, sullo spazio web del mio sito aziendale (Akebia) e con una nuovissima piattaforma, quella realizzata con SmartControl, la web application nata in questo ultimo periodo e sviluppata da me e Alessandro Scoscia, con l’impronta grafica di Vittorio Tarparelli.

In questo passaggio ho cercato di compiere anche il difficile recupero dei post pubblicati sulle precedenti piattaforme. Operazione tutt’altro che facile perché esportare e importare i dati in questi ambienti è una operazione molto complessa, spesso impossibile se non con il vecchio copia e incolla.

Visto che questa inaugurazione corrisponde anche al nuovo anno, vediamo di fare i soliti due conti col passato (il 2007) e di ipotizzare qualche cosa per il futuro.

Il 2007 è stato per me senza dubbio un anno positivo sia per gli sviluppi professionali che per quelli personali. E’ stato l’anno di SMAU, della mia prima presidenza in AID, dei progetti importanti per quanto riguarda il mio lavoro. Insomma un anno con importanti risultati e che mi ha permesso di mettere le basi per un 2008 sempre con il segno più.

Il 2008 quindi è un anno che parte già bene e che vede la nascita di questo nuovo blog. Non per il blog in se stesso, ovviamente (i contenuti stavano bene anche dove stavano prima, su Blogger), ma per il definitivo decollo di SmartControl, la nostra web application che, già pronta da molti mesi per gli usi interni aziendali, è ora pronta per il definitivo sbarco come prodotto commerciale nel mondo delle web application.

Ok. Questo è tutto, l’appuntamento è come al solito con i prossimi post.

Buon 2008 a tutti.

 

]]>