Loading...


venerdì 4 maggio 2007

Blogger e JavaScript...non sempre rose e fiori

Recentemente, mentre cercavo di inserire uno script all'interno del blog, mi sono imbattuto in un'antipatica "cocciutaggine" da parte dell'interprete di blogger, il quale invece di memorizzare il codice così come lo avevo scritto, me lo rielaborava apportando stravolgimenti tali da rendere lo script inutilizzabile.

Lo script in questione era simile a questo:

[pa]script type="text/javascript"[pc]
var uri = '....' /* <- qui c'è una stringa che viene parzialmente creata a run-time */
document.write('[pa]sc' + 'ript type="'text/javascript" src="' + uri + '" charset="ISO-8859-1"[pc][pa]/sc'+'ript');
[pa]/script[pc]

Qui, per lo stesso odioso problema, ho sostituito il simbolo di minore con [pa] ed il simbolo di maggiore con [pc].

Qui il problema è che l'interprete, invece di memorizzare l'argomento del metodo write() così come è stato scritto, lo riadatta secondo regole proprie traducendone alcuni caratteri e valutandola a tutti gli effetti come se fosse un tag di HTML vero e proprio, rendendo quindi di fatto inutile l'uso del metodo document.write(). Perciò, detto questo, come si risolve il problema (o almeno, come l'ho temporaneamente risolto io)? Beh, diciamo non in modo molto estetico, ma chi ha detto che le migliori soluzioni siano sempre anche le più belle :-) ?

La mia soluzione al problema è stata questa:

[pa]script type="text/javascript"[pc]
var uri = '...'; /* <- stringa generata a runtime */ var s1 = 'script type="';
var s2 = 'text/javascript';
var s3 = '" src="';
var s4 = '" charset="ISO-8859-1"';
var s5 = 'script';
document.write('<'+s1+s2+s3+uri+s4+'>'+'<'+'/'+s5+'>');
[pa]/script[pc]

Prima di tutto, ho suddiviso la stringa passata al metodo write() in più tronconi, ognuno assegnato ad una variabile distinta, escludendo dalla stringa assegnata alle variabili ogni possibile carattere che potesse far pensare all'interprete che quello era un tag HTML (in questo caso ogni carattere di minore e maggiore).
Infine, ho passato come argomento del metodo write() un'espressione dove andavo a concatenare le singole variabili fino a comporre lo stringa originale, stando però attento a separare ogni minore, maggiore ed i vari caratteri di slash, in modo da "ingannare" l'interprete e far sì che esso non cercasse in nessun modo di interpretare il valore dell'espressione, se non nel momento dell'esecuzione vera e propria.

Spero di essere stato chiaro ed esauriente, e di aver contribuito a risolvere qualche grana a qualcun altro che si è trovato con il mio stesso problema.

Resto in attesa di commenti o soluzioni migliori al problema (sono sicuro che ce ne sono!).

Ciao.

Nessun commento:

Posta un commento

Credo nelle libertà collettive ed individuali, tutti dovremmo avere il diritto di dire/scrivere ciò che pensiamo, ma dato che questo è un servizio per la collettività (più che personale), prego chiunque intenda lasciare un commento, di utilizzare un linguaggio civile e non offensivo nei confronti di tutti. Questo blog è moderato dall'autore. Ogni commento offensivo nei confronti di persone, animali, cose, religioni, idee, e quant'altro, non sarà accettato. Ringrazio tutti coloro che contribuiscono a questo blog con i loro commenti. Grazie.

Contattami

Tuo nome
Indirizzo email
Oggetto
Messaggio
Image Verification
Please enter the text from the image [ What's This? ]
Powered by www.emailmeform.com

www.

 

©2007-2011 by Ragnarøkkr's Blog - Creato da Ragnarøkkr a.k.a. Marco Trulla

Tutto il materiale - di qualsiasi natura esso sia - contenuto in questo blog e/o qualsiasi pagina ad esso relativa, archivi del blog inclusi, salvo dove espressamente indicato, è di esclusiva proprietà di Marco Trulla. È vietata la riproduzione, anche parziale, di tutto il contenuto del blog senza previa autorizzazione scritta del suo autore (cioè IO!). E' possibile riproporre liberamente solo brevi estratti dei post citando l'autore e inserendo link follow verso la fonte originale.

MyFreeCopyright.com Registered  Protected