In rete: http://www.elegio.it/javascript/aaa-leggimi-prego.html
27 gennaio 2010 Ho acquistato il libro di uno sviluppatore Microsoft che pero' si preoccupa di avere compatibilita' tra Internet Explorer 8 e Firefox.... BRAVO!!! "Microsoft JavaScript Passo per Passo" di Steve Suehring ISBN 9788861141483 ( Maggio 2008 Mondadori Informatica ) Ho "italianizzato" i suoi esempi perche' se le function e le variabili arbitrarie hanno nomi italiani e' piu' facile distinguere tra le function OBBLIGATORIE e quelle personali. Il problema che mi sta molto a cuore e' come leggere un file XML usando Javascript in un file HTML ( o XHTML ) Sapendolo fare potrei assegnare dati e parametri di input ad un qualsiasi programma Javascript, contenuto in una pagina HTML, che potrebbe usare quei dati per effettuare i calcoli che mi interessano... Dunque in questa ottica il file HTML fungerebbe da eseguibile mentre il file XML conterrebbe i dati da far processare all'eseguibile... INIZIALMENTE PERO' HO AVUTO DEI PROBLEMI DI COMPATIBILITA' TRA I VARI BROWSER. ORA... FORSE HO CAPITO E VOGLIO SPIEGARE LA MIA INTERPRETAZIONE DEI PROBLEMI CHE HO INCONTRATO.... Alla data odierna 2010.0127 la lettura di un file XML non mi funziona usando Safari 4 e Chrome 4. Tutto va liscio usando Firefox 3.5 ed Opera 10 ma adottando il metodo suggerito da Steve Suehring ossia facendo chiamate di function diverse rispetto a quelle necessarie quando si usa Internet Explorer 8. Con IE8 le pagine funzionano anche usando l'XHTML ma... solo se sono messe in rete, altrimenti interviene il blocco di protezione che non riesco a disattivare ( un grazie a chi mi spiegasse come fare ). Comunque, in sostanza, la lettura di un file XML funziona con IE8, Firefox ed Opera... ( un grazie a chi lo ha reso possibile !) Ma per un po' ho incontrato una grossa difficolta' avendo voluto aggiungere un tocco personale all'esempio. Dato che la lettura del file XML avviene in modo asincrono bisogna scrivere function che entrino in azione solo dopo che la lettura è completata. E' un po' come quando si inseriscono script in una pagina HTML. La prima function chiamata in modo automatico deve essere chiamata quando tutta la pagina e' stata caricata: bisogna dunque chiamare la prima function quando scatta window.onload altrimenti sono guai. Nel caso di lettura asincrona di un file XML bisogna che tutte le operazioni javascript avvengano a cascata quando tutto il file e' stato letto. Allora io ho aggiunto una function di nome utilizza() e li' ho cercato di leggere una cella della tabella che avevo creato dinamicamente. Ma usando Firefox invece di IE8 l'ID della cella non puntava a nulla ! PANICO ! Piano piano ho pero' capito questo: Supponiamo di scrivere quesa marca <mia> che contiene un po' di marche <boh>. Il frammendo di documento XML sia il seguente: <mia>: <boh>1</boh>, <boh>2</boh>, <boh>3</boh>, </mia> Ora supponiamo di voler sapere quanti nodi sono contenuti nella marca <mia> ossia supponiamo di chiamare listamarche[0].childNodes.length dove in listamarche ci sta la lista di tutte le marche di tagname "mia". Ingenuamente ho creduto che fossero tre ( le tre marche <boh> ) ma la risposta giusta e' invece sei perche' il testo presente tra due marche viene considerato un tipo speciale di marca... priva di delimitatori. Ora in Windows l'andata a capo si fa con una coppia di caratteri ossia ed ( CR e LF ) mentre in Unix basta il solo per cui siccome Firefox ragiona in Unix, se scrivo: <mia> <boh>1</boh> <boh>2</boh> <boh>3</boh> </mia> per IE8 non ci sono caratteri di testo tra le marche <boh> e dunque la listamarche[0].childNodes.length mi da' 3 mentre per Firefox tra le marche <boh> ci sono caratteri ( il carattere ) per cui listamarche[0].childNodes.length mi dà 7 ! Pertanto se cerco di accedere alla prima marca la cui id e' numerata col numero della posizione dei nodi, per IE8 devo cercare l'id 0 ma con Firefox devo cercare l'id 1 ( ossia la successiva perche' nel file XML c'era una andata a capo ) Verificare questa diagnosi visitando la pagina: test.html che se acceduta con IE8 ( standard Windows) si comporta in modo diverso da come si comporta acceduta da Firefox o da Opera ( standard Unix ). Pur avendo capito il problema e avendolo superato, lascio qui in corsivo il mio grido di dolore di quando mi sembrava di stare nel guano: Ma il guaio piu' grosso che ho individuato e' questo: Creo una tabella, ci metto i dati che estraggo da un file XML e fin qui va tutto bene.... Pero' io metto un identificatore ad alcune marche <th> e terminata la creazione della tabella vado a rileggere queste marche per verificare che questa operazione sia possibile ( come deve essere ). In IE8 va tutto bene. Uso la document.getElementById passandogli una id e lui mi fa esattamente quello che voglio.... Usando invece Firefox ed Opera il programma mi restituisce null ossia non trova la marca che vorrei recuperare ed ovviamente neppure il suo contenuto ! Questo e' un fatto GRAVISSIMO ovviamente ! Come aggirare questa difficolta' ???? Sono anni che il malfunzionamento e l'incompatibilita' tra i browser stanno sabotando l'utilizzo dell'XML come fonte di dati in pagine HTML! Non sarebbe ora di finirla e di fare cose non bacate ???? Naturalmente qui non c'era un baco ma il venire a galla della differenza tra un documento di testo scritto in stile Unix e uno scritto in stile Windows.Ecco i file sperimentati che invito ad aprire e a guardare per capire come il sorgente HTML va fatto...
- vedo-questo-xml.xml
- vedo-xml-a-semplice.html
- vedo-xml-a-semplice-x.xhtml
- vedo-xml-b-cliccabile.html
- vedo-xml-b-cliccabile-x.xhtml
- vedo-xml-c-cliccabile.html
- vedo-xml-c-cliccabile-x.xhtml
Da ultimo mi permetto di fare una critica al modo di fare di un cittadino USA ( mi comporto da Guido Bertolaso ad Haiti ma spero di non far piangere la Clinton e di non essere punito da Berlusconi ) Per motivi didattici avrei tenuto separata la dimostrazione di come si fa a creare una tabella da come si fa per leggere un file XML aggirando le differenze tra Internet Explorer ed il resto del mondo. Per la verita' anche Steve Suehring tiene le due cose separate ma io avrei trattato con molta maggiore enfasi l'aspetto della creazione dinamica di marche HTML usando le function del DOM... Visitare questa pagina dove la lettura di file XML non c'entra: costruisco.html ed applicare quanto appreso, guardando il sorgente HTML, in mille ed una occasione...