Newsgroup: it.comp.lang.javascript
Titolo: self e window su IE6

Oggi ho scoperto una cosa carina.. e se non ricordo male anche Andrea 
era incocciato in una questione analoga.
Per IE6 self e window non si riferiscono allo stesso oggetto. Al 
contrario di Netscape/Mozilla.
Per carita', se si prova a fare:
alert(self==window)
Tutto funziona,ma provate il seguente codice, nell'head della pagina:
<script>
		onload=function(){alert('x')}
		alert
("window.onload:"+window.onload+"\n"+"self.onload:"+self.onload)
</script>
Nessuno sa come IE6 gestisca internamente questi due puntatori, e 
perche' c'e' questa differenza?
Quantomeno, mi sapete dire (visto che al momento non ho modo di testare 
su altri IE) se questo comportamento e' "ereditario"? Cioe', se anche le 
precedenti versioni di IE ci comportano allo stesso modo?
Thanks.
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 se anche le precedenti versioni di IE ci comportano allo stesso modo?
IE5.5sp2: stesso risultato (nel senso che window.onload==self.onload)
Provato con IE6, risultato interessante...(null)
Dici che l'animale duplica l'oggetto anziché creare un riferimento?
Se metti (il test con IE6 lo ho fatto su un pc di un collega, non posso
continuare a stressarlo) self.onload=.... ti esegue l'alert 2 volte?

 continuare a stressarlo) self.onload=.... ti esegue l'alert 2 volte?
No, una sola. Ma perche' lui "legge" solo l'onload e non il self.onload.
Infatti, se invece di onload=function(){alert("laalal")} metti 
self.onload=function(){alert("laalal")}, non vedrai alcun alert.


 precedenti versioni di IE ci comportano allo stesso modo?
Non mi sono piu' trovato il tempo di fare i dovuti test, pero' lo notai
proprio in una webApp che ha funzionato fino all'avvento di IE6.
Se ti ricordi avevo messo, giusto per "color-coding", un bel self.onload
invece di onload e basta. IE6, fin dalla prima release, non ha scatenato
l'evento (con window.onload si').

 precedenti versioni di IE ci comportano allo stesso modo?
IE 5.50.4134.0100 senza aggiornamenti procuce il seguente output:
window.onload:function(){alert('x')} self.onload:function(){alert('x')}
~~
artemis.alpeia

contrario di Netscape/Mozilla.
anche se testi la pagina all'interno di un frame?
IMHO dovrebbero essere entrambi "the same" solo in caso di assenza
frameset. In tutti gli altri casi anche NS/Moz dovrebbero
distinguerli. :)
--
Ciao!
Davide
[DAOC PG]Armorgod Troll Sciamano - Midgard Vortigern[/DAOC PG]

 perche' c'e' questa differenza?
Ipotesi: differenziare nel caso di frames?
magari fanno puntare window al frameset principale e self al frame in 
cui sta?
 
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

 anche se testi la pagina all'interno di un frame?
Sorry per il duplicato Davide, io ho risposto stamattina off-line :-)


 anche se testi la pagina all'interno di un frame?
Ehm, che c'entra? Il punto e' che self e window *dovrebbero* puntare 
sempre allo stesso oggetto, mentre in realta' pare che non sia 
esattamente cosi', su IE6.
Su Netscape, Mozilla, e le versioni precedenti di IE tutto funziona 
correttamente.


 Ipotesi: differenziare nel caso di frames?
Come dicevo a Davide: Che senso ha questo discorso..? Il comportamento 
anomalo e' a prescindere.


correttamente.
no, IMHO :)
il riferimento a window, da una pagina all'interno di un frameset, a
cosa corrisponde? (Sempre IMHO) al livello di frameset, ovvero quasi
_top, contrariamente a self, che si riferisce alla pagina stessa.
Entrambi i riferimenti invece coincidono se non esiste frameset,
ovvero window è allo stesso livello di self. ;)


 ovvero window è allo stesso livello di self. ;)
Che difatti e' cio' che dovrebbe fare (ed e' cio' che io ho detto, hai 
testato gli script che ho postato, almeno?), ma che IE6.0 non fa.
Questo e' il comportamento anomalo.
Seconda di poi, l'oggetto window e' implicito. Ergo, non puo' mai 
riferirsi al "top", a meno che non sia la finestra attuale il "top".
Difatti il tuo "top" non e' altro che una proprieta' della window 
corrente. Quando tu ti riferisci a:
top.blablabla
in realta' stai facendo:
window.top.blablabla.
.. Tutto questo, ovviamente, bug esclusi :) (e come IE6 ci dimostra, 
possono evidentemente accadere).


 anomalo e' a prescindere.
Non sto mettendo in discussione il comportamento anomalo, ma conoscendo M$ 
non mi stupirei se avessero in cantiere qualche altra 
"personalizzazione" :-)
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli il PUNTO e metti un .

 "personalizzazione" :-)
Allora forse ho mancato il punto della tua domanda. Puoi rispiegare 
meglio? Se, pero', stai dicendo le stesse cose esposte da Davide allora 
leggi le risposte che ho dato a lui. :)
