« Come IE fa impazzire un webmaster (la variabile keywords) »
13 luglio 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à
13 luglio 2010 alle 11:13
e quando il webdesigner – vil razza dannata – pretese di testare su IE per Mac (che usava solo lui) e scoprii che window.print non funzionava? volevo morire.
13 luglio 2010 alle 12:14
questo errore è micidiale, e incredibilmente sottovalutato dalla documentazione ufficiale.
comunque la strada è una sola, la 2: bisogna dare dei nomi assurdi alle variabili, con IE non si può mai sapere.
13 luglio 2010 alle 12:21
Gli errori peggiori di IE sono quelli sottili, in IE6 se l’ultimo carattere di un commento è un’accentata si mangia il newline…
// trallalà
var i = 1;
alert( typeof( i ) ); // == undefined