Le colpe dei parents

Da "Tiger, Mustang e Dolphin" (04 Giu 2006) non ho scritto più nulla per il buon FiNeX ed il suo blog. La verità è che scrivere di informatica mi annoia, non ne so parlare e me ne riempio pienamente le borse 8x5 ore settimanalmente, come minimo. Mi sembrerebbe di non essere mai uscito dal posto di lavoro.

A volte però si può fare una eccezione: capita una esperienza che vuoi condividere e dato che si tratta di qualcosa prettamente informatica, non potevo infilarla nel mio blog. I miei lettori non approverebbero un post di tale natura.

Ringrazio quindi FiNeX per lo spazio.

Qualche settimana fa stavo lavorando ad un prodotto web quando mi sono imbattuto in qualcosa del genere.

ie7_error

Per chi non lo sapesse, questa è una finestra di dialogo di Internet Explorer (un navigatore di pagine pubblicate della rete Internet, IE d'ora in poi) che è incluso nel sistema operativo Windows Vista, entrambi prodotti da una società chiamata Microsoft. Solitamente questa finestra scappa fuori quando una pagina che state visionando richiede al vostro programma IE di fare delle operazioni e queste falliscono durante l'esecuzione. Tali operazioni si chiamato script.
In questo caso se voi vedeste il sorgente della pagina, ovvero il testo che viene interpretato dal vostro navigatore per visualizzarvi la pagina, alla linea 5 e carattere 1 c'è qualcosa di non implementato. Ma non fateci molto affidamento, a volte canna di brutto e queste informazioni vi portano solo fuori strada.

Per non romperci troppo, non è questa la sede per parlare di "A è meglio di B" e "C sucks di brutto". Perché io sia vincolato a usare tali mezzi e non altri è presto detto: LO VUOLE IL CLIENTE. Non c'è nulla da fare, per ora o in questo caso non ci sono margini alla discussione per ora. Deve funzionare per D (è certificato per D), se poi funziona anche per quello che piace a me... molto meglio, ma non necessario.

Comunque, ritorniamo al tema principale.

Se riuscite a reperire il sorgente della pagina, nel mio caso alla riga 5 trovereste questo:

parent = x.parentNode;

dove parent è una variabile a cui assegnare il riferimento di parentNode (nodo superiore) di x, precedentemente definito.

Subito ho pensato: Possibile che IE non abbia implementato il parentNode?
Rovistando caoticamente nella rete molti si sono posti la stessa domanda e nessuna risposta chiara era stata data.
Ho eseguito il sorgente con Firefox (analogo programma per la visualizzazione di pagine pubblicate) e tutto funzionava come nei miei pensieri.
Ma dato che il programma è certificato per IE e non per Firefox, dovevo trovare una soluzione per IE. Quindi ho cambiato lievemente il sorgente e ho rieseguito il tutto. Stesso risultato: "Non implementato". Questa volta l'errore è su una linea come questa:

parent = document.getElementById('x_parent');

dove document è l'oggetto che indica l'intero sorgente a livello programmazione e getElementById è una funzione che restituisce il nodo marcato con un identificativo specificato, in questo caso 'x_parent'.

Subito ho pensato: Possibile che IE non abbia implementato il getElementById?
Dopo però sono arrivato alla verità e sono impallidito: "È solo perché il mio cervello superiore derivava da una progettazione eugenetica che sono sopravvissuto" direbbe Khan Noonien Singh.

Ad essere non implementato per IE è la variabile parent, una variabile con tale nome non può essere utilizzata in script che vogliano essere eseguiti con tale programma. In gergo la situazione non si dice non implemetata (espressione usata per i metodi e le funzioni). Si parla invece di parola riservata del linguaggio, ovvero termini che non possono essere utilizzati perché servono al linguaggio e a particolari istruzioni che intendiamo eseguire.

Ma perché, a parità di linguaggio, parent sia parola riservata per IE e non per Firefox rimane ancora un mistero irrisolto. Io intanto ho cambiato il nome della variabile e vivo felice e contento.

Fine.