Newsgroup: it.comp.lang.javascript
Titolo: Safari e riferimento a oggetti

Salve a tutti,
ho un problema con Safari. In breve questo codice genera un'eccezione:
   alert("window : " + window);
che la console registra con il messaggio
   TypeError - No default value
e l'esecuzione del codice di scripting viene terminata.
Se mi riferisco a un attributo di window (come 'name' o 'document',
...), tutto funziona regolarmente. Se con lo stesso codice mi
riferisco a 'document' ottengo la stringa che mi aspetto:
[objectHTMLdocument].
Lo stesso errore si verifica se utilizzo 'self' o 'parent'. Oggetti
che rappresentano un [objectWindow], insomma.
Il codice funziona perfettamente su Mozilla, Netscape, Opera, IE, ma
con Safari non ne vuole proprio sapere...
Non ho trovato nulla a proposito nè dalle parti di 
apple.com
 come pure
nel resto della rete...
Qualcuno ha qualche idea?

 e l'esecuzione del codice di scripting viene terminata.
Buffo, e strano. Perche' "window" e' gia' di per se' una proprieta'. La
proprieta' dell'oggetto "window", appunto, che e' implicito.
Hai detto che con self o parent tutto funziona. Giusto per curiosita', hai
provato anche con:
alert("window : " + window.window);
?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Se potete leggere questo, la mia donna e' caduta.
(Letta sul retro di una maglietta di un motociclista)

 Hai detto che con self o parent tutto funziona.
no. ha detto che _non_ funziona
la cosa mi preoccupa.. forse non è implementato il metodo toString
dell'oggetto window??
--
artemis.alpeia
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 dell'oggetto window??
Si fa presto a verificarlo. Chi ha Safari faccia:
alert(typeof window);
alert(typeof window.toString);
alert(window.toString());
Che risultati danno questi alert?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)

 tutto sommato non mi sembra poi un problema 
Beh, in realta' si. Perche' non si tratta di "casting" mancato:
Semplicemente quando prendi un oggetto e lo utilizzi come stringa,
Javascript chiama implicitamente un metodo, il toString(). Questo
comportamento e' comune a tutti gli oggetti, ed e' ereditato dall'oggetto
Object(). La maggior parte degli oggetti "embedded" hanno un overload del
metodo (vedi, ad esempio, l'oggetto Date).
Il fatto che non funziona su window e' cmq un po' preoccupante. Tra
l'altro, come ti dicevo, non si tratta di casting ma di chiamata a metodo,
e cosi' come gli oggetti embedded hanno un overload del toString, cosi'
puoi farlo tu su oggetti tuoi o embedded. Io ho sovraccaricato l'oggetto
Date, ad esempio.
A me non e' mai capitato di dover fare un overload dell'oggetto window, ma
non si puo' mai sapere..


 ok, ma anche volendone fare l'overload... toString() ? :-)
Non ho capito.. che intendi dire?
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Tutti quelli che credono nella psicocinesi, per favore alzino la mia mano.

 Volendo farne l'override, poi, ricorda che String(window) funziona :-)
Beh, ma che c'entra.. In quel caso non stai facendo l'override di niente,
stai solo creando un oggetto partendo da un'altro. Una specie di "cast".
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 richiamabie da menu per segnalare bug ad Apple.
Bene. Io la cosa la farei quantomeno notare, allora.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Nei film americani, qualsiasi problema che venga considerato 
sufficientemente catastrofico, puo' essere risolto facendo esplodere uno 
o piu' ordigni nucleari" (ZER0 & Cosimo)

 il mastro a questo punto sei tu: cosa riporto?
Verifica quei sei esempi, e poi buttiamo giu' qualcosa.
Da quanto mi hai detto, sembra quasi che "manchi" all'oggetto window
l'entry point per il toString, ma che una volta definito viene rimappato
correttamente; e come IE non permette l'overloading.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
I feel like I'm diagonally parked in a parallel universe.

 "[objectWindow]"... mentre alert("x" + window) causa l'errore.
Allora avevo inteso male io, la quasi totalita' dei testi che ti ho fatto
fare era inutile 8)
Riepilogando:
alert(""+window) -> errore
alert(window) -> "[objectWindow]"
indipendentemente da quel che imposto come "toString" precedentemente,
ovvero, per esempio:
window.toString=function(){return "gh";}
alert(""+window) -> errore
alert(window) -> "[objectWindow]"
e se non imposto il metodo toString(), un:
alert(typeof window.toString)
mi restituisce "undefined", corretto?
Se stavolta ho capito, cio' da far presente e' unicamente questo alla
Apple.
L'oggetto window non eredita il metodo toString() da Object. Aggiungendolo
manualmente, non viene comunque utilizzato dallo script engine.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Deformazione professionale č:
Quando in ascensore senti la ragazza accanto che tira fuori il cellulare,
e ti volti per capire se e' un modello sul quale puoi sviluppare in J2ME.

 manualmente, non viene comunque utilizzato dallo script engine.
segnalo or ora... fatto.
-- 
Splendente in eta` acerba di passione
Rosso fiammante
Ma senza eta` matura
Marcia impostura