Come risolvere il problema dei tag script con TinyMCE

Dato che sono stato accusato da un mio amico di non scrivere mai sul blog (ed effettivamente in questo periodo purtroppo non riesco a trovare il tempo per farlo), oggi mi ritaglio un po’ di tempo prima di pranzare per esporre la soluzione a un problema con i tag in TyniMCE.

TinyMCE è un editor WYSIWYG gratuito facilmente integrabile in qualsiasi piattaforma. Il problema in sé di TinyMce è che non esiste una documentazione approfondita in italiano ed è un editor che per essere usato al massimo delle sue capacità ha bisogno di essere settato.

Lavorando su un network di blog di un cliente mi sono imbattuto in un problema molto semplice, ogni qualvolta inserivo un Javascript i tag venivano convertiti da a e l’attributo src in mce_src.

Capirete bene che questa conversione non voluta non permetteva la corretta esecuzione dello script. Pertanto dopo un po’ di ricerche ho trovato che bisognava settare TinyMCE affinché validasse i tag script. Per settarlo bastava aggiungere questo parametro nel richiamo dell’editor nel tag :

extended_valid_elements : 'script[type|src]'

Pressapoco dovreste avere un risultato di questo tipo:

//

In realtà nonostante questo accorgimento i tag continuavano a essere convertiti. A questo punto l’unica soluzione per risolvere il problema era andare alla radice.

Aprendo il file tiny_mce.js bisogna editare questa porzione di codice:

if (h.indexOf('
h = h.replace(/// ');^M
h = h.replace(/]+)>(s*|//s*n//n');^M    h = h.replace(/s*(//s*|//s*)?/g, 'n// </mce:script>');^M
h = h.replace(/<mce:script(|[^>]+)>n// </mce:script>/g, '<mce:script$1></mce:script>');^M
}^M
// ]]></script>

Questa porzione di codice, come si può intuire, è la funzione che si occupa della conversione. Cancellando mce: e _mce la conversione avverrà comunque, ma non altererà il codice inserito.

Questo è un piccolo tricks per aggirare il problema dei tag script su TinyMCE che spero possa essere utile soprattutto al mio amico Luca 😉

Scritto da
Damiano Congedo
Partecipa alla discussione

commento
Damiano Congedo