Newsgroup: it.comp.lang.javascript
Titolo: Struttura Frame "dinamica"

Ciao a tutti.
Volevo gentilmente sapere se la seguente cosa e' fattibile, esempio:
-Ho una pagina con due frame verticali (due colonne): il contenuto del 
frame sinistro non cambia, mentre il frame destro ospita una pagina che 
potra' essere cambiata con un'altra, e poi con un'altra, ecc..
Ora, se io digitassi l'url di una pagina html qualsiasi (non 
inserita' in alcun frame) chiamata pippo (esempio), sarebbe possibile che 
all'apertura di questa venisse automaticamente chiamata la pagina con la 
struttura frameset e che pippo venisse caricata nel frame destro (il 
frame sinistro non cambia mai)?
So che con javascript sarebbe possibile che, all'apertura di una pagina 
html normale, si venisse subito dirottati alla pagina contenente la 
struttura Frameset, solo che quest'ultima caricherebbe in entrambi i 
frame le pagine html specificate all'interno del codice della struttura 
FrameSet (dunque non sarebbe un qualcosa di dinamico).
Faccio un esempio piu' chiaro.
Supponiamo di avere una pagina html il cui url sia 
www.pio.org/cip.html
 e 
supponiamo di avere una pagina, con url 
www.pio.org/index.html
, al cui 
interno e' definita FrameSet (con specificati due frame verticali, due 
colonne).
Ecco, se digito 
www.pio.org/cip.html
 vorrei che all'inizio del 
caricamento di cip.html si venisse subito dirottati al caricamento di 
www.pio.org/index.html
, MA vorrei che alla fine del caricamento di 
index.html nel suo frame destro fosse presente la pagina cip.html.
E' possibile fare questo in qualche modo?
Ciao e grazie a tutti per gli eventuali interventi.
Marcotto

 frame sinistro non cambia mai)?
Ho messo uno script del genere nel sito
http://digilander.iol.it/sezione1/nuovo/index.htm
. Lo script è specifico
per quel sito, in quanto non avevo previsto di doverlo riutilizzare;
quindi dovrai modificarlo per adattarlo al tuo sito. Il funzionamento è
il seguente: in tutte le pagine è contenuto un JavaScript che verifica
se la pagina stessa è contenuta in un frame oppure nella finestra
principale, e nel secondo caso memorizza l'indirizzo della pagina
corrente nella variabile 
window.name
 e carica la pagina del frameset;
nel frameset è presente un JavaScript che genera dinamicamente il codice
HTML impostando come indirizzo del frame quello letto dalla variabile
window.name
 (che persiste tra una pagina e l'altra) se presente, oppure
l'indirizzo di default se assente.
G. G.

 In locale, naturalmente, non funzionerà.
Prima di tutto grazie mille per le info minuziose ed accurate (un grazie 
naturalmente anche a G.G., un altro fan di Nikita), provero' il tutto il 
prima possibile, ma................. ammetto di essere un coglionotto  :(
perche' mi sono totalmente dimenticato di dire che che c'e' di mezzo una 
pagina di preload, dunque il passaggio automatico dovrebbe essere questo 
(tenendo sempre buono l'esempio di 
www.pio.org/cip.html
 come pagina di 
partenza che dovrebbe rimandare alla pagina di preload 
www.pio.org/preload.html
, che a sua volta richiama la pagina 
www.pio.org/index.html
 nella quale e' definito il frameset e nel cui 
frame destro viene caricata la pagina dalla quale e' partito tutto 'sto 
casino, cioe' 
www.pio.org/cip.html
); schematicamente, digitando l'url 
www.pio.org/cip.html
 dovrebbe accadere automaticamente questo:
www.pio.org/cip.html
 -> 
www.pio.org/preload.html
 -> 
www.pio.org/index.html
 (nel cui frame destro viene caricata 
www.pio.org/cip.html
).
Ora, mi sa che questo non si puo' fare, perche' se e' vero che il 
passaggio 
www.pio.org/preload.html
 -> 
www.pio.org/index.html
 non e' un 
problema, lo e' quello di far transitare l'"informazione" dell'url 
www.pio.org/cip.html
, informazione indispensabile affinche' quando viene 
caricata 
www.pio.org/index.html
, nel suo frame destro venga caricata 
www.pio.org/cip.html
.
Credo che non si possa fare (sigh), ma dal momento che sono una totale 
pippa in Javascript (spero di migliorare con il librone dell'apogeo preso 
stamattina), lascio la parola agli esperti eventualmente interessati 
all'argomento.
Scusate per l'andazzo prolisso.
Ciao e grazie ancora.
Marcotto

 del doppio passaggio :) IMHO si può fare eccome.
La non possibilita' era riferita al fatto che 
www.pio.org/cip.html
 e' un 
esempio, sono varie le pagine che dovrebbero comportarsi come lei 
(sorry, mi sa che prima non l'avevo detto), ecco che dunque il discorso 
diventa dinamico.
Lo scopo e' questo (ammetto, un po' contorto): se qualcuno volesse 
visitare alcune mie pagine, io dovrei dargli solo l'url specifico, 
nell'esempio e' 
www.pio.org/cip.html
, ma potrebbe essere qualsiasi altra 
pagina (tipo 
www.pio.org/ciop.html
, tanto per rimanere in tema di 
scoiattoli); una volta richiamata quella singola pagina, verrebbe 
scatenato tutto il resto (caricamento di quella di preload ed infine 
caricamento dell'index nel cui frame destro viene caricata la pagina di 
partenza della quale avevo fornito l'url).
Lo scopo di tutto questo e' permettere al visitatore interessato ad una 
specifica pagina di NON vederla isolata, ma nel contesto di tutto il mio 
sito, e nello stesso tempo evitargli di andare normalmente sul sito e 
navigarlo fino a trovare la summenzionata pagina, vorrei che se la 
trovasse bella pronta digitando solamente l'url di quella pagina nel 
browser.
Allora, sono o non sono contorto come 'na bestia? :)
A parte questo, ti ringrazio ancora per il tuo piu' che interessante 
codice (sicuramente da studiare per bene, visto che con gli 
"oggetti" faccio a botte, perche' inerente soluzioni di automazione che 
mi interessano parecchio).
Ciao, Marcotto

 
www.pio.org/cip.html
.
Come ti ho accennato, puoi trasmettere stringhe di testo da una pagina
ad un'altra memorizzandole nella variabile 
window.name
, che persiste
anche dopo aver lasciato la pagina. In alternativa puoi usare un cookie,
ma hai l'inconveniente che se l'utente ha disabilitato i cookie lo
script non funziona più.
G. G.

 ad un'altra memorizzandole nella variabile 
window.name
,
Uela, ma allora con questa scoperta (per me) del 
window.name
 e con 
l'utile esempio presente nell'ultimo post di Catarsi si dovrebbe riuscire 
a fare quello che sto cercando di concludere (scusate, l'ho spiegato 
meglio nel mio penultimo post, cioe' a partire dalla digitazione dell'url 
di una qualsiasi pagina cip.html, si avvi in automatico il caricamento 
della pagina di preload e successivamente della pagina in cui e' 
specificato il frameset, e nel frame destro di quest'ultima si carichi 
la pagina cip.html), o mi sbaglio?
Il mio problema e' che non so come mettere insieme il tutto, non ci 
capisco assolutamente niente con gli oggetti e con le varie proprieta' e 
metodi di questi. Sto cercando di rimediare con un libro appena 
acquistato, ma credo che ci vorra' un bel po' di tempo prima che il mio 
"bozzo" possa partorire qualcosa di pratico-risolutivo.
Non vi chiedo di aiutarmi ulteriormente perche' l'avete gia' fatto fin 
troppo, ma se uno di questi giorni vi ritroverete annoiati per qualche 
motivo, pensate al cip e ciop.html del sottoscritto  :)
Ciao e grazie.
Marcotto

 motivo, pensate al cip e ciop.html del sottoscritto  :)
In tutte le pagine (tranne index.html e preload.html) metti il seguente
script. Puoi metterlo in un qualunque punto della pagina, ma prima lo
metti prima viene eseguito; pertanto ti consiglio di metterlo all'inizio
della pagina, prima del tag <html>.
<script language="JavaScript">
<!--
if (self.location == top.location)
{
 
window.name
 = 'frameURL=' + self.location.href;
    self.location.replace('preload.html');
}
// -->
</script>
Lo script rileva se la pagina è caricata nella finestra principale, e in
caso affermativo memorizza l'indirizzo della pagina nella variabile
window.name
 e carica la pagina preload.html. Se la pagina preload.html è
contenuta in una cartella diversa, dovrai scrivere il percorso corretto.
Se non vuoi aggiungere manualmente lo script a tutte le pagine, puoi
usare il programmino (freeware) Search and Replace 98
(
http://www.htmlworkshop.com/srhtml98.html
), che consente di trovare e
sostituire stringhe di testo in tutti i file presenti in una directory.
Basta che cerchi il tag <html>, e sostituisci lo script seguito dal tag
<html>.
Nella pagina preload.html metterai lo script per il precaricamento, che
presumo tu abbia già scritto. In caso contrario, ti consiglio un'applet
Java (
http://www.spigots.com/miser.htm
), che consente di precaricare
ogni tipo di file. Una volta finito il precaricamento, carichi la pagina
index.html, usando la funzione location.replace se usi il tuo script o
impostando l'apposito parametro dell'applet se usi l'applet.
Infine nella pagina index.html metti il seguente script all'interno del
tag <head>...
<script language="JavaScript">
<!--
function setFrame()
{
    if (window.name.indexOf('frameURL=') == 0)
    {
self.frames['destro'].location.replace(window.name.substring(9));
 
window.name
 = '';
    }
}
// -->
</script>
... e aggiungi il parametro onload="setFrame()" al tag <frameset>.
Questo metodo è più lento di quello che ho messo nel sito di mia cugina
(il frame viene cambiato dopo che tutto il frameset è stato caricato),
ma è molto più semplice, quindi se non sei esperto è meglio che usi
questo. Lo script legge l'indirizzo del frame dalla variabile
window.name
 e sostituisce il frame "destro". Se il frame non si chiama
"destro", basta che metti il nome corretto nello script.
Spero che ti funzioni.
G. G.

 questo.
Ok, quando ci capiro' di piu' mi mettero' ad analizzare le 
"ottimizzazioni" (a parte questo, ganzissimo l'effetto acqua nella tua 
foto).
Ascolta, visto che le informazioni dettagliate che tu e Catarsi avete 
fornito non le ho trovate da nessuna parte (nemmeno su Jsdir, 
html.it
, 
risorse.net
, ecc.), perche' in futuro non vi mettete a fare dei tutorial 
(non solo su javascritp-frame, ma anche su altri argomenti che 
padroneggiate bene)? Anche a pagamento.
Tutorial chiari e competenti fanno risparmiare un sacco di tempo e 
spesso sono piu' efficaci di un qualsiasi (e costosissimo) libro, io 
sarei sicuramente il primo a pagare per lavori cosi' utili.
Ciao e ancora grazie mille.
Marcotto

 Ciao e ancora grazie mille.
Di niente.
G. G.

 Comunque quando avrò tempo, ci penserò.
Pensaci, pensaci  :)
Sto analizzando il bello e soprattutto funzionale sito di tua cugina e ho 
notato che la soluzione "dinamica" frame-javascript funziona ottimamente 
con Netscape e IE, ma non con Opera5.x, come mai? Mancanze di Opera? Ehi, 
se ti serve un tester fammi pure un fischio  :)
A parte questo, non vorrei sbagliare, ma per caso tua cugina si firma on-
line come Nikitafax? Ne conoscevo una che frequentava il forum di phoebe 
(prima che questo andasse off-line) e che aveva un debole per Angel (guai 
a parlarle di Spike)  :)
AriGrazie a lot  :)
Ciao, Marcotto

 a parlarle di Spike)  :)
Non credo. NikitaFx è menzionata nella pagina "Credits", quindi immagino
sia un'altra persona. Mia cugina si firma "Poon" e "Maraccia", non so se
ha altri nickname...

 Se vuoi una patch per rimediare al problema puoi trovarla qui:
Purtroppo non mi funziona; evidentemente la mia versione di Outlook
Express è diversa da quella prevista dalla patch. Per il momento
correggerò manualmente il subject; speriamo che funzioni. Grazie per la
segnalazione, io non ci avevo nemmeno fatto caso.
G. G.