Impossibile accedere a Joomla dopo il login
In un sito Joomla 1.5.2 su cui sto lavorando è impossibile accedere con Internet Explorer alla homepage dopo il login. Il browser restituisce l'errore "Impossibile aprire il sito. Operazione terminata" e chiude la connessione.
Il problema sembra essere un baco che IE si porta dietro dalla versione 5.5 e che il buon Roberto Cancelli della PiccoloMoscio non si è mai preoccupato di risolvere.Purtroppo in alcune particolari condizioni il codice di Joomla incappa in questo bug e rende impossibile la navigazione all'interno del sito.
Vediamo insieme come risolvere.
In pratica se dobbiamo lanciare uno script il prima possibile, senza attendere il caricamento completo di tutti gli oggetti della pagina dovremmo sostituire la chiamata window.onload() con window.addEvent(’domready’).
In questo modo potremmo, ad esempio, lanciare un menù java senza attendere il completo caricamento di tutte le immagini in una homepage, cosa molto utile specie se si usa una connessione non proprio velocissima.
Joomla in questo modo carica Mootools, un framework javascript per abilitare gli effetti Web 2.0.
Come dicevo prima IE non ha un controllo delle chiamate DOM, quindi se si cerca di eseguire una chiamata che modifica un tag prima che esso sia chiuso, IE se la prende male e e non ci parla più, impedendoci di vedere il sito che desideriamo navigare.
Sull'articolo KB927917 Microsoft spiega la causa di questo problema con uno scioglilingua:
Questo problema si verifica perché un elemento contenitore di figlio HTML contiene il codice di script che si tenta che modifica l'elemento contenitore di padre dei figli contenitori. Si tenta il codice di script che modifica l'elemento contenitore di padre utilizzando il metodo innerHTML o il metodo appendChild.
Comunque il consiglio che da è di non inserire codice JS che modifichi un tag fino a quando lo stesso tag non è stato chiuso.
Ok, chi spiega a Microsoft che se sto usando un CMS complesso come Joomla non posso riscrivermi centinaia di pagine di codice?
Cos'è un computer?
La mia Opera Prima!
Approfitta ora delle offerte Black Friday/Cyber Monday/Natale per acquistarlo con sconto nei circuiti delle librerie online!
Che cos'è un computer? Scopriamolo insieme facendo quattro chiacchiere tra amici. Qui troverai parole semplici e paragoni efficaci che spiegano ai “non addetti ai lavori” i concetti alla base dell'uso dei computer. Seguimi in questo viaggio dove ti spiegherò cosa c’è “sotto il cofano” in modo che la prossima volta che dovrai scegliere un portatile ed il commesso ti chiederà se vuoi un processore Intel o AMD, se ti bastano 4Gb di RAM o 500Gb di disco, saprai cosa rispondere.
Inizia a leggere le prime pagine, vedi come, con un linguaggio semplice e fludio, spiego i concetti base dell'informatica e del computer! >>LEGGI L'ANTEPRIMA!<<
Formato:11,4x17,2 cm
Foliazione:156
Copertina: morbida
Interno: bn
Supporti disponibili: Cartace/eBook
Scheda del libro
in vendita presso:

A questo punto dovremmo trovare una soluzione alternativa.
Purtroppo per chi usa IE l'unico modo per far funzionare un DOM è attendere il completo caricamento della pagina e di tutti i suoi oggetti.
Negli Headers della homepage di Joomla possiamo trovare, poco sopra la chiusura dell'headers stesso:
window.addEvent('domready', function(){ var JTooltips = new Tips($$('.hasTip'), { maxTitleChars: 50, fixed: false}); })
Dovremmo sostituire questa stringa con
var load_method = (window.ie ? 'load' : 'domready');
window.addEvent(load_method, function(){ var JTooltips = new Tips($$('.hasTip'), { maxTitleChars: 50, fixed: false}); });
Ovvero, controlla se il browser è IE, se si allora esegui il domready al caricamento della pagina.
Non è una cosa piacevole per quanti usano Internet Explorer, navigano su siti con molte immagini ed hanno una connessione lenta, ma che dire...
Forse è il caso di passare ad altri browser?
Bene, per modificare questa stringa html dobbiamo modificare la funzione che la genera.
Essa si trova nel file /libraries/joomla/html/html/behavoir.php, esattamente alla riga 108 di tale file incluso con la versione 1.5.2 di Joomla, troviamo:
$tooltipInit = ' window.addEvent(\'domready\', function(){ var JTooltips = new Tips($$(\''.$selector.'\'), '.$options.'); });';
Mettiamo un bel // davanti alla riga per commentarla e sostituiamola con
$tooltipInit = ' var load_method = (window.ie ? \'load\' : \'domready\');'
.'window.addEvent(load_method, function()'
.'{ var JTooltips = new Tips($$(\''.$selector.'\'), '.$options.'); });';
Salviamo, cancelliamo la cache di IE e ricarichiamo la homepage, eseguiamo il login e, come per magina, la pagina si apre senza problemi!
La vita è un continuo mettersi in discussione, trovare i propri limiti ed affrontarli, io ogni giorno ne trovo almeno 3 e tutti portano a prodotti Microsoft. Sono contento che esistono tutti questi bachi, altrimenti rischierei di perdere parecchia elasticità mentale!