« Come IE fa impazzire un webmaster (la variabile keywords) »

13 luglio 2010 @ 11:06

Vi 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?

  1. dichiarare propriamente le variabili con var nomevar = valore; non è una perdita di tempo inutile
  2. dare dei nomi troppo comuni alle variabili non è una buona idea
  3. i bug più sono stupidi più sono difficili da trovare
  4. ie sucks.  Ma in fondo questa non è un novità

3 commenti a “Come IE fa impazzire un webmaster (la variabile keywords)”

  1. Gilthas ha detto:
    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.

  2. Aresio ha detto:
    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.

  3. Gerry ha detto:
    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

Lascia un commento