Newsgroup: it.comp.lang.javascript
Titolo: [FAQ] Risposte alle domande piu' comuni su JavaScript

FAQ di it.comp.lang.javascript versione 1.0 - 24/09/2004
Questa raccolta di FAQ vuole cercare di rispondere alle domande dei neofiti
di JavaScript che si trovano davanti ai problemi piu' comuni quando si
sviluppa con questo linguaggio.
Quando postate su it.comp.lang.javascript, ricordate di essere chiari
nell'esporre il problema e di indicare chiaramente di cosa si tratta nel
subject del post, ad es. "Problema invio form". Non c'e' nulla di piu'
scocciante di trovare dei post con subject "Aiuto, problema con script"
oppure un laconico "non funziona". Il piu' delle volte questi post verranno
inesorabilmente ignorati.
Cercate di essere il piu' concisi possibile, cercando di includere il
codice che ha generato l'errore, evitando al contempo di allegare l'intera
pagina. Se potete, indicate gli errori segnalati dal browser o dal
debugger, e le operazioni o i dati che hanno causato l'errore.
Reference di JavaScript:
http://devedge.netscape.com/central/javascript/
Altre risorse:
http://www.mozilla.org/docs/web-developer/faq.html
http://www.w3.org/DOM/DOMTR
-------------------------------------------------------------------
( 1) Come faccio riferimento alla finestra genitrice da una popup?
( 2) Come si apre un documento/come si accede in un altro
     frame/iframe/finestra?
( 3) Posso caricare dati in una pagina senza fare il refresh?
( 4) Come evito la richiesta di conferma quando chiudo una finestra?
( 5) Passando il codice da IE al browser X non funziona piu' nulla, come
     mai?
( 6) Posso far parlare PHP/JSP/ASP con JavaScript?
( 7) Che istruzione uso per impostare la pagina iniziale/aggiungere ai
     preferiti?
( 8) Posso disabilitare i tasti Avanti/Indietro del browser?
( 9) Come posso impedire l'invio di un form?
(10) Posso espellere il CD/spegnere il computer/comporre un numero di
     telefono con JavaScript?
-------------------------------------------------------------------
( 1) Come faccio riferimento alla finestra genitrice da una popup?
Quando si apre un collegamento in un'altra finestra cliccando su un
collegamento ipertestuale con impostato un target diverso dalla finestra
attuale, oppure quando si apre una finestra da javascript con una chiamata
a window.open(), la finestra figlia mantiene il riferimento alla finestra
che l'ha aperta nell'oggetto window.opener. Per settare le variabili della
finestra genitrice, chiamare le funzioni in essa dichiarate o accedere ai
campi di un form, si usera' quindi la sintassi:
opener.miaVariabile = 3;
opener.faiQUalcosa();
opener.document.write('Del testo');
var valoreCampo = opener.document.nomeForm.nomeCampo.value;
-------------------------------------------------------------------
( 2) Come si apre un documento/come si accede in un altro
     frame/iframe/finestra?
I frames sono accessibili tramite l'array frames dell'oggetto window. Per
accedere ad un frame che fa parte dello stesso frameset, bisogna far
riferimento alla finestra genitrice:
parent.frames['nomeFrame'].location.href = nuovoURL;
parent.frames['nomeFrame'].miaVariabile = 3;
se invece si vuole accedere ad un iframe, che fa parte della stessa
finestra, useremo la sintassi:
window.frames['nomeIframe'].location.href = nuovoURL;
oppure, omettendo window:
frames['nomeIframe'].miaVariabile = 3;
per accedere infine ad un'altra finestra occorre che la finestra sia stata
aperta da script, oppure sia la finestra genitrice della finestra corrente:
var nuovaFinestra = window.open();
nuovaFinestra.document.write('Del testo');
opener.location.href = nuovoURL;
-------------------------------------------------------------------
( 3) Posso caricare dati in una pagina senza fare il refresh?
Si', e' possibile. Per caricare del testo/immagini/dati senza ricaricare la
pagina si puo' usare un frame nascosto di appoggio in cui caricare il
documento che contiene i dati desiderati e successivamente accedervi per
estrarne del testo. Sui browser della famiglia Mozilla si puo' inoltre
usare l'oggetto XMLHttpRequest per caricare un URL, mentre su IE si puo'
usare l'oggetto ActiveX Msxml2.XMLHTTP.
Fare riferimento anche a:
http://msdn.microsoft.com/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp
http://www.mozilla.org/xmlextras
-------------------------------------------------------------------
( 4) Come evito la richiesta di conferma quando chiudo una finestra?
Non e' possibile, mettetevi il cuore in pace. Per rispetto nei confronti
dell'utente, JavaScript puo' chiudere con il metodo close() soltanto
finestre aperte tramite window.open(). Alcuni browser non visualizzano
neppure la richiesta di conferma, limitandosi ad ignorare i vostri comandi. 
Tuttavia e' noto un bug su certe versioni di IE che permette di aggirare la
limitazione. Basta settare la proprieta' opener per poter magicamente
chiudere la finestra corrente senza visualizzare alcuna conferma.
-------------------------------------------------------------------
( 5) Passando il codice da IE al browser X non funziona piu' nulla, come
     mai?
IE ha un'implementazione proprietaria di JavaScript chiamata JScript, che
ha una sintassi leggermente differente. Inoltre il motore di scripting di
IE e' notoriamente di bocca buona, e cerchera' di far funzionare codice che
su altri browser lancerebbe decine di errori e warning. Non si puo' dare
una risposta generale al perche' non funzioni piu' nulla, tuttavia e'
ragionevole pensare che abbiate fatto:
uso di document.all;
riferimento ai tag tramite il loro id usato come nome di variabile;
riferimento ai form tramite il nome del form senza premettere document;
Per ovviare alle precedenti, e far funzionare il codice sul resto dei
browser, dovete sostituire:
document.all[id] -> document.getElementById(id)
idCampo.value -> document.getElementById('idCampo').value
nomeForm.action -> document.nomeForm.action
-------------------------------------------------------------------
( 6) Posso far parlare PHP/JSP/ASP con JavaScript?
Si', e' possibile, nei due sensi. Per passare valori da JavaScript al
server, potete usare dei form oppure chiamare direttamente degli URL del
tipo:
http://nome.del.server/percorso/per/lo/script?var1=1&var2=2
 ,
usando dei frame nascosti, settandone l'URL con location.href.
Viceversa, per passare dei valori ad uno script JavaScript potete scrivere
direttamente sulla pagina o sul file .js linkato al documento, ad esempio
in PHP:
var miaVariabile = <?php echo $mia_variabile; ?>;
-------------------------------------------------------------------
( 7) Che istruzione uso per impostare la pagina iniziale/aggiungere ai
     preferiti?
Su IE si puo' fare uso dei metodi dell'oggetto window.external. Per
ulteriori informazioni consultare:
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/external.asp
-------------------------------------------------------------------
( 8) Posso disabilitare i tasti Avanti/Indietro del browser?
No, non e' possibile. Tuttavia si puo' fare in modo che la pagina aperta
sostituisca nella cronologia la pagina precedente, aprendola con
location.replace(). In tal modo, la pagina precedente non sara' piu'
accessibile dalla cronologia e il tasto indietro non avra' effetto
location.replace('
http://nome.del.dominio
');
-------------------------------------------------------------------
( 9) Come posso impedire l'invio di un form?
Usando il gestore onSubmit del form; se volete eseguire dei controlli sui
dati(*) prima di effettuare l'invio, e in caso di errori impedire l'invio
del form, potete fare restituire false dall'onSubmit: il form non verra'
inviato
<script type="text/javascript">
<!--
   function controlla(frm)
   {
      if (frm.nomeCampo.value.length < 2)
         return false;
      else
         return true;
   }
//-->
</script>
<form action="mioScript" onSubmit="return controlla(this);">
   <input type="text" name="nomeCampo" />
   <input type="submit" />
</form>
(*)
non sembra superfluo ricordare che e' buona norma effettuare dei controlli
di consistenza anche sul server, in quanto capitera' prima o poi l'utente
furbo che trovera' il modo di inviare comunque i dati del form
-------------------------------------------------------------------
(10) Posso espellere il CD/spegnere il computer/comporre un numero di
     telefono con JavaScript?
No, no e no. JavaScript e' un linguaggio che puo' eseguire comandi limitati
alla finestra del browser nel quale viene eseguito. Tuttavia, su IE potete,
con il beneplacito dell'utente, far eseguire un ActiveX personalizzato ed
eseguire virtualmente qualunque operazione sul computer, persino scrivere
su disco.
-- 
./artemis.alpeia

su disco.
Solo un'aggiunta:
Con i browser di tipo Gecko si puo' usare XPCOM
(
http://www.mozilla.org/projects/xpcom/
) per ottenere lo stesso
risultato degli ActiveX, e volendosi far del male esiste anche un
plug-in per eseguire ActiveX con i browser Gecko
http://www.iol.ie/~locka/mozilla/mozilla.htm
Puo' essere anche utile parlare di signed scripts
(
http://www.mozilla.org/projects/security/components/signed-scripts.html
)
o del fatto che per applicazioni locali (non su web) le cose sono un
po' piu' semplici usando HTA (IE) o "XUL" (per Gecko).
'bye

 poterne più di fornire ogni volta la stessa risposta).
sono perfettamente d'accordo.
-- 
<img src="artemis.alpeia" />

alle aggiunte e agli apprifondimenti potremmo usare uno spazio web[*]. 
La mia aggiuta sara' stata troppo lunga, ok, ma e' riducibile a "Con i
browser di tipo Gecko si puo' usare XPCOM" :-)
Altrimenti e' come dire che l'unico modo per ottenere quei risultati
e' l'uso di IE (ed e' falso).
Per il resto sono d'accordo :-)
'bye

On Fri, 24 Sep 2004 22:28:22 GMT, artemis.alpeia wrote:
[stra-cut]
Ai tempi avevo proposto la stessa e avevamo incominciato con i partecipanti 
del NG a buttare giu' qualcosa; potremmo integrare i due lavori.
-- 
ZER0://coder.gfxer.web-designer/
~ Il computer e' una macchina progettata per velocizzare e automatizzare
gli errori.

 Solo un'aggiunta:
Corretto cio' che dici, ma direi che non fanno parte delle "FAQ".
-- 
ZER0://coder.gfxer.web-designer/
~ "Problemi" e' il nome che gli informatici danno a quelli che
comunemente verrebbero definiti "disastri"; altrimenti si chiamano
"features".

 su disco.
In effetti un'altra FAQ e' "posso leggere/scrivere un file di testo con
Javascript?"
-- 
ZER0://coder.gfxer.web-designer/
~ Se potete leggere questo, la mia donna e' caduta.
(Letta sul retro di una maglietta di un motociclista)

 -------------------------------------------------------------------
5 piccoli contributi al volo:
----------------------------------
(11) Perche' IE non mi esegue le Applet? Perche' questa APPLET non mi 
funziona? JAVA e' JavaScript, o JavaScrip ce l'ha piu' lungo (il nome! :-)?
(12) Esiste [qual'e'] un [il] (miglior) editor [visuale] per JavaScript?
(13) a.- Come posso caricare un file di testo?
     b.- Come posso accedere ad Access/un database?
     c.- Come posso scrivere un file sul server/client?
(14) Perche' non rieco a preimpostare il value di un campo FILE?
(15) Come posso far si che il DOC/PDF/XLS/etc venga scaricato e non aperto?
(16) Posso proteggere un'area del sito con password usando JavaScript?
----------------------------------
Baldi giovani, piu' che suggerire le domande al momento non posso fare, 
comunque... vi tengo d'occhio almeno fino a fine novembre, poi si 
vedra' :-)))
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
  ---- Bring Your Site To Life!!!!
http://www.wmtools.it
 ---- WebMasterTools - Servizi per il tuo sito
http://www.dev2dev.it
 ---- La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli il PUNTO .

> FAQ di it.comp.lang.javascript versione 1.0 - 24/09/2004
[...]
Sono parecchio latente, ma non assente.
Bel lavoro artemis, bel lavoro tutti, bentrovato Riccardo.
Per ora non contribuisco oltre (e' una rassicurazione), in futuro 
chissa' (e' una minaccia).

Un link molto interessante per javascript è il seguente:
http://www.quirksmode.org/
Comprende anche una tabella di compatibilità del DOM tra molte versioni di
browser.

 vedra' :-)))
In bocca al lupo e facci sapere ;)
-- 
ZER0://coder.gfxer.web-designer/
~ 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.

On Fri, 24 Sep 2004 22:28:22 GMT, artemis.alpeia wrote:
[cut]
Un'altra cosa: Sarebbe bene spiegare quello che a prima vista sembra un bug
sulla gestione dei numeri a virgola mobile (lo standard IEEE 754).
-- 
ZER0://coder.gfxer.web-designer/
~ I feel like I'm diagonally parked in a parallel universe.

 In bocca al lupo e facci sapere ;)
Stiamo gia' girando per negozi ed ipermercati alla ricerca delle offerte sui 
pannolini :-P


 sulla gestione dei numeri a virgola mobile (lo standard IEEE 754).
Yeah! Concordo.
Avevo scritto un miniarticolo per la rivista, che poi non hanno piu' 
pubblicato, in cui raccoglievo un po' tutto quel che si era detto.
Te lo mando per posta cosi' lo controlli ben bene e lo inserite.


ultimi tempi non e' stata postata spesso.. che ne dite?
Mi sembra di aver visto un messaggio al riguardo giusto oggi :-)
BTW se qualcuno vuol fare dei test:
http://academy.dyndns.org/
'bye

 ...cut...
Penso che potrebbe esservi utile questo link per decidere quali FAQ inserire:
http://www.jsdir.com/faq/faq.asp?espandi=top20
Sono le 20 FAQ piu' richieste in JsDir.com e mi sembra che rispecchino 
abbastanza fedelmente anche le richieste nel NG.
Il numero di richieste ricevute (dal 2000 circa se ben ricordo) e' qui sotto: 
la prima colonna ("...numero=") e' il numero della faq la seconda il numero 
di richieste (visualizzazioni) avute:
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=48
	3975
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=365
	3974
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=229
	3937
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=5
	3878
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=50
	3558
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=177
	3504
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=2
	3430
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=74
	3392
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=450
	3379
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=474
	3035
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=47
	2843
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=473
	2591
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=46
	2571
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=1
	2515
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=96
	2478
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=505
	2456
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=80
	2401
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=64
	2277
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=140
	2183
http://www.jsdir.com/faq/faq.asp?espandi=mostra&numero=57
	2174
La media di richieste per tutte le faq e' di 640 visualizzazioni.
Il numero di richieste comprende anche le richieste dalla pagina della TOP20, 
quindi forse la classifica e' un po' falsata, ma cmq rispecchia il numero di 
volte che la FAQ e' stata visualizzata.
Se volete vi passo il db (e' access ancora per poco :-)
p.s.
Ho aggiunto il link in testa per facilitarvi la visualizzazione nel browser 


 
http://academy.dyndns.org/
"STARFLEET ACADEMY".. lol.
Io ho gia' dato all'epoca dei grandi scontri proprio su questo NG un lustro
fa o giu' di li'.. Cmq bookmarko, si dice mai che in un futuro prossimo
trovi il tempo di giochicchiarci un po'.
-- 
ZER0://coder.gfxer.web-designer/
~ La vita e' una tempesta, ma prenderla nel culo e' un lampo.
(B. Grillo)

 pannolini :-P
LOL ^_^; Un mio collega ha avuto un figlio proprio un paio di settimane fa.
:)
-- 
ZER0://coder.gfxer.web-designer/
~ Come devo regolare la stampante laser per stordire?
(How do I set a laser printer to stun?)

 Te lo mando per posta cosi' lo controlli ben bene e lo inserite.
Deve essere proprio mini, altrimenti e' il caso di estrapolare solo il
minimo necessario. :)
-- 
ZER0://coder.gfxer.web-designer/
~ Alcune persone sono ancora vive per il semplice motivo che e'
illegale ucciderle.

 all'epoca, no?
Si e no... se non vi dispiace che ogni tanto mi assento per me non c'e' alcun 
problema.
Tempo fa parlasti di un software per lavorare insieme sullo stesso documento, 
se riesci ad organizzarti/ci sarebbe meglio, solo in questo thread gia' si 
comincia a perdere l'orientamento con una ventina di post :-)


 Tempo fa parlasti di un software per lavorare insieme sullo stesso documento, 
Ah si? ^___^;


 Ah si? ^___^;
Maggio o settembre 2003 se ben ricordo.
Ne ho letto ieri quando ho cercato i vecchi tentativi (ricordi quando 
postasti le META-FAQ che hai ripreso qui?), ma ora non posso controllare, 
dovrei chiudere gravity, riprendere vecchi archivi da cd, etc... 


 postasti le META-FAQ che hai ripreso qui?)
Si, ma tutto l'ambaradan delle MFAQ ce l'ho altrove, infatti ho ripostato
solo il TOC (che ho rintracciato sul NG grazie a google).
-- 
ZER0://coder.gfxer.web-designer/
~ Ci siamo fatti una scopata cosi' eccezionale che anche i vicini hanno
fumato una sigaretta.

 FAQ di it.comp.lang.javascript versione 1.0 - 24/09/2004
grazie a tutti per i contributi, spero di riuscire a sintetizzare tutti i
vostri consigli e le dritte!
bella l'idea della wiki-faq, Zer0, ma attualmente mi sembra un'ipotesi
lontana ^^;
-- 
artemis://alpeia

 lontana ^^;
Uh? E perche'..? Cmq se cerchi su google dovresti trovare i post relativi
alle MFAQ sulle quali stavamo lavorando; io direi che questo tipo di lavoro
dovrebbe essere portato avanti da tutti, quanto meno dallo "zoccolo duro"
del ng.


lontana ^^;
Di codice per siti Wiki se ne trova in giro in gran quantita' in
qualsiasi linguaggio preferisci (da Perl a PHP ed oltre) e volendo
scriverne  uno apposta non e' nemmeno cosi' difficile (e' anche
abbastanza divertente). :-)
 
Basta trovare il server, il codice per il sito Wiki che si preferisce
ed installare/configurare il tutto :-)
'bye

 boh, chissa' a che mi riferivo? Al Wiki..? (po' esse')
Mi riferisco a questo thread: 
http://tinyurl.com/5wcyq


 ed installare/configurare il tutto :-)
Io di server ne ho (Linux/Apache/PHP), la gente c'e', direi che mi pare
abbastanza fattibile. :)
-- 
ZER0://coder.gfxer.web-designer/
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio' che
non sempre lo e'" (Paul Klee)

abbastanza fattibile. :)
Yep
'bye