Ancora una volta ci ritroviamo a parlare di un bug, nello specifico Javascript, che affligge la compatibilità cross browser d'Internet Explorer 8. In particolare facciamo riferimento alla funzione del DOM (Document Object Model) window.onload(), responsabile di gestire (handler) gli eventi al caricamento della finestra (window) del browser. Quando andiamo a definire uno script Javascritp con all'interno window.onload al quale assegniamo una funzione, questa non viene "invocata" al load della pagina in Internet Explorer 8, il tutto sembra apparentemente inspiegabile, poichè il metodo onload così definito funziona perfettamente con gli altri browser o versioni superiori di IE.
Risolere il bug di IE8 con window.onload è davvero semplice, andiamo a scoprire come fare.
Supponiamo d'inserire nel tag head della nostra pagina il seguente codice javascript:
<script type="text/javascript">
window.onload = function()
{
// do something
}
</script>
Con detto script inserito tra i tag head, la funzione assegnta all'evento window.onload() non funziona con internet explorer 8.
Il motivo di questo malfunzionamento è da ricercare, inizialmente in un possibile errore all'interno del codice della funzione, anche un semplice e banale errore di battitura blocca lo script e pertanto il codice associato all'evento onload non viene eseguito. Ma se fossimo in questo caso, window.onload non funzionerebbe con qualsiasi browser, essendo certi però che il nostro codice Javascript è corretto, esso con IE8 continua a non funzionare, come mai? Probabilmente, la motivazione è da ricercarsi nei tempi di caricamento delle risorse della pagina rispetto al verificarsi dell'evento onload, per un qualche motivo in IE8 l'evento onload, così scritto, viene eseguito dopo che tutto il contenuto della pagina è stato caricato.
Ad ogni modo fixare questo bug è molto semplice, basta dichiarare la funzione assegnata a window.onload come un oggetto, tramite l'operatore new, in questo modo:
<script type="text/javascript">
window.onload = new function()
{
// do something
}
</script>
In questo modo, tramite l'operatore new creiamo un nuovo oggetto d'assegnare all'onload di window, l'effetto di assegnamento di un nuovo oggetto comporta l'esecuzione immediata della funzione al caricamento della finestra; basta pertanto modificare lo script in questo modo per risolvere il problema di window.onload in internet explorer 8.