« Come IE fa impazzire un webmaster (la variabile keywords) »
07/13/2010 @ 11:06Vi racconto la storia di un piccolo pezzo di codice javascript, che funzionava felice su tutti i browser del mondo creato.
Purtroppo arrivò il brutto IE, che invece lo gradiva su una pagina mentre su un’altra, identico, non gli andava proprio giù.
Il codice potrebbe essere, più o meno, questo:
<script type="text/javascript">
<!--
function print_something(prefix){
// assegno keywords
keywords = "!";
// scrivo le keywords
document.write( prefix + keywords );
}
// chiedo la stampa
print_something("world");
// -->
</script>
Ora, perchè un codice del genere ad IE piace moltissimo in questo file e non funziona del tutto in quest’altro?
Non vi farò giocare alle 10 differenze, nel secondo file ci sono i meta tag nell’header ed IE decide di instanziare un oggetto keywords per accedervi. Quindi non si può riutilizzare la parola keywords come variabile nella funzione perchè IE l’ha già istanziata e ogni operazione porta ad un errore.
Da notare che questo simpatico comportamento  avviene solo all’interno di funzioni (all’esterno keywords risulta undefined) e solo se keywords non è dichiarata propriamente (cioè dichiarando var keywords = “!”; il codice funziona perfettamente).
Chiaramente IE non ritorna un messaggio di errore coerente, tipo questa variabile è già dichiarata,  ma si lamenta su operazioni non valide o proprietà inesistenti.
Cosa si impara da questa esperienza?
- dichiarare propriamente le variabili con var nomevar = valore; non è una perdita di tempo inutile
- dare dei nomi troppo comuni alle variabili non è una buona idea
- i bug più sono stupidi più sono difficili da trovare
- ie sucks.  Ma in fondo questa non è un novitÃ



