Newsgroup: it.comp.lang.javascript
Titolo: Le piccole perle di Internet Explorer..

Volevo condividere con voi questa piccola perla di Internet Explorer, che
mi ha fatto tornare in mente la classica frase da newbie "eppure con
Internet Explorer va, quindi il codice e' giusto".
Non saro' breve :P
Premesso che in questi giorni, come ho scritto in altri post, sono un poco
distratto:
Stavo provando un "nuovo approccio" ad un "vecchio problema". In un punto
del codice, referenziavo un elemento HTML, nel caso specifico un input
type="text" e ne recuperavo il value.
Il codice era un po' incasinato, ma funzionava tranquillamente.
Almeno, su IE. Su Mozilla non andava. Cribbio. E non capivo perche'. Testa
che ritesta.. il codice Javascript era perfetto. Ma su Mozilla si bloccava
quasi subito.
Un poco di debugging, e scopro che Mozilla non referenzia correttamente
l'oggetto. Eppure la chiamata era semplicissima, qualcosa tipo:
myobj=document.getElementById("fldText")
faccio un:
alert(myobj)
e IE mi risponde in modo corretto, Mozilla no.
Eppure l'elemento HTML c'era, IE lo referenziava.. mentre penso queste
cose, rileggo il codice HTML e mi trovo:
<input type="text" value="default" name="fldText" id0"fldText" />
*SBONK*
Avevo scritto troppo velocemente, e quindi rilasciato prima del dovuto lo
SHIFT mentre scrivevo il simbolo di "=" nell'attributo id, e mi aveva
scritto uno zero.
Internet "digerisco anche i sassi" Explorer, se n'e' fregato bellamente. Ha
"giustamente" pensato che se non trovava un ID valido, il getElementById
poteva farcela tranquillamente con il "name" (ma vorrei far notare alla M$
che il metodo si chiama, appunto getElementById e non getElementByName)..
Mozilla ovviamente mi rispondeva picche.
Se anche IE evitava di "interpretare liberamente" il codice, avrei risolto
questa scemenza molto prima.. Bah.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 questa scemenza molto prima.. Bah.
come ti comprendo.. in questi giorni capita anche a me di perdere delle
mezz'ore su porzioni di codice.. spero passi
--
artemis.alpeia
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Eh eh eh questa la sapevo...pensa un po' a cosa succede se sbagli a mettere
l'id nel codice, ma per sfiga becchi un name che esiste in un altro
controllo...funziona tutto, solo che ti referenzia un oggetto che non
c'entra nulla...e vai a capire il perché!
Ecco, questo č ciň che č capitato a me qualche tempo fa, e per capire cosa
succedeva (e poi, una volta capito, a cercare di capire il perché), ci avevo
impiegato il suo bel tempo...
Mio nonno direbbe "mal comune mezzo gaudio"...

 questa scemenza molto prima.. Bah.
è una vecchia querelle
ricorda tanti ma tanti anni fà le discussioni tra chi usava il C "agli
albori" e i cultori del basic
i Basicanti non tolleravano la "rigidezza" sintattica del C
sull'assegnamento delle variabili
soprattutto delle stringhe
però i programmi scritti con rigidezza funzionavano senza problemi (ci
mettevi un pò di più all'origine)
quelli scritti in basic  alla carlona in due minuti si impiombavano per
cazzate che non si notavano  se non dopo giorni di dura ricerca
noto con disappunto che IE ha lasciato l'impostazione alla carlona dei
Basicanti rovinando una sintassi  (quella del javascript) derivata dal ben
più robusto C
per fortuna i puristi come i mozilliani che non hanno subito deformazioni
Visuabasicanti hanno rispettato l'antico credo

 mezz'ore su porzioni di codice.. spero passi
Spero che tu non abbia le preoccupazioni che ho io, o peggio, che sono la
causa delle mie recenti distrazioni (detto in parole povere, "ho la testa
altrove"). Niente di serio, per carita', ma troppi pensieri tutt'assieme.
Ma a prescindere da questo, il comportamento di IE proprio non mi va giu'.
Pensavo di aver scritto una boiata in JS, mentre invece era tutto corretto
(ecco perche' non trovavo l'errore), ed era l'HTML ad avere delle
problematiche.. che, giustamente Mozilla mi segnava. Mentre Internet "sono
di bocca buona" Explorer gliene fregava assai.
E poi uno si domanda perche' per "formare" una persona nello sviluppare web
in modo corretto, si faccia una fatica del diavolo: Se provengono da IE, la
risposta e' scontata..


 Mio nonno direbbe "mal comune mezzo gaudio"...
Il mio avrebbe detto "Suvvia, suvvia, non v'arrabbiate, che tutto si
sistema"..
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'
che sara', non cambia cio' che e'.
Sta a te decidere poi come prendere questa cosa,se logorarsi per un passato
che non puoi cambiare, invece di prendere tutto il bene che il presente ti
offre." ()

 albori" e i cultori del basic
Concordo con quanto dici in seguito (giusto ieri a pranzo con dei
consulenti ne abbiamo discusso), ma questa e' tutt'altra solfa.
A me sta anche bene che IE sia piu' "libertino" di Mozilla & soci, finche'
questo suo comportamento si applica a metodi piu' o meno proprietari, mi
puo' anche andar bene.
O che lo sia quando uso VBScript, invece di JScript.
Ma se mi implementi un'API standard, cribbio, rispettane le specifiche!
Altrimenti te ne fai una chiamata "getElementByIDorName", oppure fai tutto
il porcaio che vuoi con document.all.. *quello* lo posso anche accettare.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 mercato si monopolizza in mille modi.
Diciamo che queste "libere interpretazioni" non servono tanto a
monopolizzare il mercato, quanto a mantenere tale monopolio.
Che famo, stendiamo un velo pietoso?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 risposta e' scontata..
la cosa che proprio non digerisco di IE č che referenzia i campi con un id
assegnato con il valore dell'id stesso rendendo praticamente impossibile
l'utilizzo di quel nome all'interno degli script


 l'utilizzo di quel nome all'interno degli script
Si, ti capisco. Considera pero' che su WinCE e' l'unico modo di
referenziare un oggetto, quello.
Inoltre, io tendo ad evitare di dare lo stesso nome dell'oggetto alla
variabile che lo referenzia, senza contare che spesso uso un certo tipo di
nomenclatura per gli id ed un'altra per le variabili, quindi anche volendo
talvolta sarebbe un po' difficile.
In ogni caso puoi sempre fare cosi':
if (typeof fldText=="undefined")
	fldText=document.getElementById("fldText");
e risolvi la questione.


 che il metodo si chiama, appunto getElementById e non getElementByName)..
pazzesco. ;(
certo se provavi a dare una validata al codice lo beccavi
subito il problema.
-- 
email: goldicus1970 AT 
yahoo.it
blog: 
http://www.deelan.com/

 ...
Ora te ne racconto io una:
SOAP:
  - Server PHP PEAR:SOAP (veramente fico),
  - client javascript su browser web
Inizio con chi rispetta gli standard: Mozilla. tutto perfetto.
Passo a IE e penso: "MS e' stata una delle prime aziende ad utilizzare 
SOAP e a spingerlo come protocollo per cui non avro' sicuramente problemi".
Instanzio alla MS il mio oggetto MSSOAP.SoapClient e... automation 
object error ...!! Miiii, ma cosa e' successo?!? Vuoi vedere che ho 
sbagliato nome?
MSSOAP1.SoapClient no
MSSOAPLib.SoapClient no
MSSOAP.SoapClient.1 no
...
non c'e' verso.
Ad un certo punto scopro, da qualche parte nel bailame di interet, che 
l'oggetto MSSOAP non e' siglato sicuro e che quindi non puo' essere 
instanziato se non abbassando il livello di sicurezza del browser etc 
etc. seee mi fidassi adesso! E poi e' impensabile un sito che per 
offrire un servizio richiede di modificare il livello di sicurezza del 
browser; voglio dire, in linea teorica si puo' fare in pratica vuol dire 
far scappare un casino di gente.
Ma perche' non e' siglato sicuro quando invece MSXML2 lo e'? In MSXML2 
c'e' l'oggetto xmlhttp che mi permette di connettermi ad un sito web e 
di fare con questo quello che voglio...
Perchè MS non vuole farci usare MSSOAP nel browser? Forse sarebbe troppo 
facile utilizzarlo come client per accedere a server SOAP senza 
sviluppare applicazioni con .NET?
La cosa non si spiega tant'e' che con MSXML2.xmlhttp ho fatto quanto mi 
serviva, ossia ho fatto funzionare anche IE come client SOAP del mio 
server sviluppato in PHP. Tie'!!
Ciao.
	-Ema-